在我的应用

时间:2017-05-19 13:14:54

标签: java jpa docker keycloak

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

使用本地安装的keycloak docker进行测试时,单个请求需要4.0秒。如果我同时运行此脚本的5个实例,则单个请求大约需要10秒。 如果我运行10个实例,它会在收到回复之前跳转到20秒。

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

我正在运行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"]

更新

我也尝试过测量" auth / realms / master / protocol / openid-connect / token"请求。这是每个请求0.1秒,只有一个脚本运行实例,0.8秒运行10个实例。

1 个答案:

答案 0 :(得分:3)

也许这是一个愚蠢的观察,但你是否试图在你的docker配置中增加你的JVM堆?像:

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

有一个很棒的博客可以解释memory issue with the JVM and docker here