在我的应用中使用auth / admin / realms / myrealm / users时出现瓶颈

我正在运行一个脚本,在请求用户的列表之前请求主令牌。 我在一个紧密的循环中执行这个请求100次,并输出执行"auth/admin/realms/mine/users?first=0&max=1000"请求所需的时间。

当使用本地安装的keycloak泊坞窗进行testing时,一个请求需要花费4.0秒。 如果我同时运行这个脚本的5个实例,一个请求大约需要10秒。 如果我运行10个实例,它会在收到答复之前跳到20秒。

因此,我在页面上的webapp中遇到了一个严重的瓶颈,我列出了所有的用户信息,并想知道如何解决这个问题。

我正在运行keycloak 2.5.0.Final 。 我的java主页是/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jreauthorizationPersister = jpa

我的脚本:

 import requests keyCloakUrl = "http://foo.bar" for i in range(100): session = requests.Session() r = session.post( keyCloakUrl +"auth/realms/master/protocol/openid-connect/token", data={ "grant_type":"password", "client_id":"admin-cli", "username":"admin", "password":"admin" } ) master_token = json.loads(r.content)['access_token'] r = s.get( keyCloakUrl + "auth/admin/realms/mine/users?first=0&max=1000", headers={'Authorization':'Bearer '+master_token} ) print(r.elapsed.total_seconds()) 

我的dockerfile:

 FROM jboss/keycloak-mysql:2.5.0.Final ARG db2 ADD deps/ /opt/jboss/keycloak/ RUN /opt/jboss/keycloak/import_utbud_realm.sh CMD ["-b", "0.0.0.0", "-bmanagement", "0.0.0.0", "-Djboss.socket.binding.port-offset=2"] 

UPDATE

我也尝试测量“auth / realms / master / protocol / openid-connect / token”请求的时间。 每个请求只有0.1秒,只有一个脚本实例在运行,而在运行10个实例的情况下只有0.8秒。

也许这是一个愚蠢的观察,但你有没有尝试增加你的DockerconfigurationJVM堆? 喜欢:

 CMD java -XX:+PrintFlagsFinal -XX:+PrintGCDetails $JAVA_OPTIONS -jar java-container.jar 

有一个很棒的博客解释了JVM和Docker在这里的内存问题

Interesting Posts