如何设置Keycloak运行内存?

Keycloak

1 前言

一个问题,一篇文章,一出故事。
今天生产环境的Keycloak正式迁移,迁移后页面查询已经登陆用户的session有点慢,于是想到调整Keycloak的运行内存。

2 最佳实践

2.1 环境配置

我们假设你已经设置了Keycloak的如下环境,

如何升级RHBK到26.4.16?

2.2 部署自定义主题安装包

2.2.1 修改启动脚本

vim /etc/systemd/system/keycloak.service

修改如下加粗的配置,

[Unit]
Description=Redhat build of Keycloak (RHBK)
Requires=network.target
After=syslog.target network.target

[Service]
Type=simple
User=keycloak
Group=keycloak
WorkingDirectory=/opt/keycloak/rhbk-26.4.16
Environment="KEYCLOAK_ADMIN=admin"
Environment="KEYCLOAK_ADMIN_PASSWORD=adminpwd"
Environment="JAVA_OPTS_APPEND=-Xms2g -Xmx3g -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 \
-Djgroups.bind.address=10.168.0.76 -Djgroups.bind.port=7800 \
-Djava.net.preferHostsFile=true -Dsun.net.inetaddr.ttl=0 -Dsun.net.inetaddr.negative.ttl=0 -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true"
ExecStart=/usr/bin/bash -c '/opt/keycloak/rhbk-26.4.16/bin/kc.sh start --tls-hostname-verifier=ANY'
Restart=on-failure
StandardOutput=journal
LimitNOFILE=102642

[Install]
WantedBy=multi-user.target

配置修改后,你需要执行如下命令重载服务使脚本生效

systemctl daemon-reload

2.2.2 重启服务使配置生效

systemctl restart keycloak

2.2.3 验证配置

pgrep -u keycloak java -a

可见如下输出,

999201 java -Dkc.config.built=true -Djava.util.concurrent.ForkJoinPool.common.threadFactory=io.quarkus.bootstrap.forkjoin.QuarkusForkJoinWorkerThreadFactory -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.err.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -XX:+ExitOnOutOfMemoryError -Djava.security.egd=file:/dev/urandom -XX:+UseG1GC -XX:FlightRecorderOptions=stackdepth=512 -Djdk.tls.rejectClientInitiatedRenegotiation=true -Xms64m -Xmx512m --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED -Duser.language=en -Duser.country=US -Xms2g -Xmx3g -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -Djgroups.bind.address=10.168.0.76 -Djgroups.bind.port=7800 -Djava.net.preferHostsFile=true -Dsun.net.inetaddr.ttl=0 -Dsun.net.inetaddr.negative.ttl=0 -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true -Dkc.home.dir=/opt/keycloak/rhbk-26.4.16/bin/.. -Djboss.server.config.dir=/opt/keycloak/rhbk-26.4.16/bin/../conf -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Dpicocli.disable.closures=true -Dquarkus-log-max-startup-records=10000 -cp /opt/keycloak/rhbk-26.4.16/bin/../lib/quarkus-run.jar io.quarkus.bootstrap.runner.QuarkusEntryPoint start --tls-hostname-verifier=ANY

进一步的,你可以执行如下命令确认真实生效的参数,

jcmd $(pgrep -u keycloak java) VM.flags

可见如下输出,

999201:
-XX:CICompilerCount=3 -XX:CompressedClassSpaceSize=218103808 -XX:ConcGCThreads=1 -XX:+ExitOnOutOfMemoryError -XX:FlightRecorderOptions=stackdepth=512 -XX:G1ConcRefinementThreads=4 -XX:G1EagerReclaimRemSetThreshold=16 -XX:G1HeapRegionSize=2097152 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=2147483648 -XX:MarkStackSize=4194304 -XX:MaxGCPauseMillis=200 -XX:MaxHeapSize=3221225472 -XX:MaxMetaspaceSize=268435456 -XX:MaxNewSize=1931476992 -XX:MetaspaceSize=100663296 -XX:MinHeapDeltaBytes=2097152 -XX:MinHeapSize=2147483648 -XX:NonNMethodCodeHeapSize=5832780 -XX:NonProfiledCodeHeapSize=122912730 -XX:+ParallelRefProcEnabled -XX:ProfiledCodeHeapSize=122912730 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:SoftMaxHeapSize=3221225472 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC

没有评论

发表回复

Keycloak
如何升级RHBK到26.4.16?

1 前言 一个问题,一篇文章,一出故事。 本章将测试Red Hat build of Keycloa …

Keycloak
如何设置Keycloak单独输出Events日志?

1 前言 一个问题,一篇文章,一出故事。 最近笔者对Keycloak的跨数据中心冗余方案进行调整,实 …

Keycloak
如何定义Keycloak infinispan集群名称?

1 前言 一个问题,一篇文章,一出故事。 笔者的生产环境有两个数据中心,我们简称dg和hk,当前系统 …