1 前言
一个问题,一篇文章,一出故事。
今天生产环境的Keycloak正式迁移,迁移后页面查询已经登陆用户的session有点慢,于是想到调整Keycloak的运行内存。
2 最佳实践
2.1 环境配置
我们假设你已经设置了Keycloak的如下环境,
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
没有评论