Jenkins and Java Xmx Xms

Hello, this is my first post, i hope i’ve created it in the right place and with right tags.

Currently i have 3 Jenkins servers:

  • 2.319.3 (Ubuntu 18.04)
  • 2.319.2 (Ubuntu 18.04)
  • 2.303.1 (Ubuntu 16.04)

Also i’m using “puppet-jenkins” module (GitHub - voxpupuli/puppet-jenkins: Puppet module for Jenkins)

I installed 2 new Jenkins servers (Ubuntu 22.04, Jenkins 2.375.3 LTS)

Issue is: when i run “htop” i don’t see JAVA_ARGS with Xms and Xmx arguments on new servers
(while on currently used (older OS systems and older Jenkins major versions) everything OK.
Is this expected?


Troubleshooting that was done:

I know that beginning with Jenkins 2.332.1 and Jenkins 2.335, the Linux package installers use systemd to manage services.

Previously JAVA_ARGS used to be configured in “/etc/default/jenkins” and after migration to SystemD now users need to put DropIn files into “/etc/systemd/system/jenkins.service.d/”

$ systemctl status jenkins.service
● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/jenkins.service.d
└─puppet-overrides.conf
Active: active (running) since Tue 2023-02-28 10:50:50 UTC; 16min ago
Main PID: 6186 (java)
Tasks: 55 (limit: 4618)
Memory: 1.2G
CPU: 1min 33.158s
CGroup: /system.slice/jenkins.service
└─6186 /usr/bin/java -Djava.awt.headless=true -Djenkins.install.runSetupWizard=false -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080

content of “/etc/default/jenkins”:
NAME=jenkins
JAVA_ARGS=“-Djava.awt.headless=true”
PIDFILE=/var/run/$NAME/$NAME.pid
JENKINS_USER=$NAME
JENKINS_GROUP=$NAME
JENKINS_WAR=/usr/share/java/$NAME.war
JENKINS_HOME=/var/lib/$NAME
RUN_STANDALONE=true
JENKINS_LOG=/var/log/$NAME/$NAME.log
JENKINS_ENABLE_ACCESS_LOG=“no”
MAXOPENFILES=8192
HTTP_PORT=8080
PREFIX=/$NAME
JENKINS_ARGS=“–webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT”

$ cat /etc/systemd/system/jenkins.service.d/puppet-overrides.conf
[Service]
Environment=“JAVA_OPTS=-Djava.awt.headless=true -Djenkins.install.runSetupWizard=false”
Environment=“HTTP_PORT=8080”
Environment=“AJP_PORT=-1”
Environment=“HTTP_HOST=127.0.0.1”
Environment=“JENKINS_ARGS=–webroot=/var/cache/$NAME/war --httpListenAddress=$HTTP_HOST --httpPort=$HTTP_PORT --sessionTimeout=10080 --sessionEviction=302400”
Environment=“JAVA_ARGS=-Djava.awt.headless=true -Xms1620m -Xmx2835m -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -XX:+UseStringDeduplication -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1”
Environment=“MAXOPENFILES=8192”

$ systemctl show jenkins | grep Drop
DropInPaths=/etc/systemd/system/jenkins.service.d/puppet-overrides.conf

$ systemctl show jenkins | grep JAVA
Environment=JENKINS_HOME=/var/lib/jenkins JENKINS_WEBROOT=/var/cache/jenkins/war “JAVA_OPTS=-Djava.awt.headless=true -Djenkins.install.runSetupWizard=false” JENKINS_PORT=8080 HTTP_PORT=8080 AJP_PORT=-1 HTTP_HOST=127.0.0.1 “JENKINS_ARGS=–webroot=/var/cache/$NAME/war --httpListenAddress=$HTTP_HOST --httpPort=$HTTP_PORT --sessionTimeout=10080 --sessionEviction=302400” “JAVA_ARGS=-Djava.awt.headless=true -Xms1620m -Xmx2835m -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -XX:+UseStringDeduplication -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1” MAXOPENFILES=8192

Technically i can see in next output that Jenkins Java JVM actually has correct settings under the hood:
$ cat /proc/6186/task/6186/environ
JENKINS_HOME=/var/lib/jenkinsUSER=jenkinsAJP_PORT=-1JENKINS_ARGS=–webroot=/var/cache/$NAME/war --httpListenAddress=$HTTP_HOST --httpPort=$HTTP_PORT --sessionTimeout=10080 --sessionEviction=302400HOME=/var/lib/jenkinsNOTIFY_SOCKET=/run/systemd/notifySYSTEMD_EXEC_PID=6186HTTP_HOST=127.0.0.1LOGNAME=jenkinsJOURNAL_STREAM=8:50608HTTP_PORT=8080PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/binINVOCATION_ID=c731108157ef4ae09285f415a4afab9fLANG=en_US.UTF-8SHELL=/bin/shMAXOPENFILES=8192PWD=/var/lib/jenkinsJAVA_ARGS=-Djava.awt.headless=true -Xms1620m -Xmx2835m -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -XX:+UseStringDeduplication -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1

But why it is not displayed (as usual) in “htop” output?

While doing troubleshooting on Ubuntu 22.04, Jenkins 2.375.3 LTS i entered “JAVA_ARGS” into “/etc/default/jenkins”, restarted service → and it was actually applied. I’ve seen in “htop” this argument again, with proper values and memory usage droped correctly (as expected).

So seems that in “htop” JAVA_ARGS are not displayed. This is kinda confusing to understand (for me as regular user) if Xmx and Xms settings were applied or not and i had to dig to understand if it is Ok or not.