Узкое место при использовании auth/admin/realms/myrealm/users в моем приложении

Я запускаю script, который запрашивает мастер-маркер перед запросом списка пользователей для области. Я выполняю этот запрос в сжатом цикле 100 раз и выдает время, необходимое для выполнения запроса "auth/admin/realms/mine/users?first=0&max=1000".

При тестировании с локально установленной док-станцией для клавиатуры, один запрос занимает 4,0 секунды. Если я запускаю 5 экземпляров этого script одновременно, один запрос занимает около 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/jre. authorizationPersister = jpa.

Мой script:

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())

Мой файл докеров:

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 секунды на запрос только с одним экземпляром script и 0,8 секунды с запуском 10 экземпляров.

Ответы

Ответ 1

Возможно, это глупое наблюдение, но вы пытались увеличить кучу JVM в своих конфигурациях докеров? Как:

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

Существует фантастический блог, в котором объясняется проблема памяти с JVM и докере здесь