Узкое место при использовании 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 и докере здесь