Принудительный Full GC Java-процессов по cron
0 3 * * * for pid in $(pgrep -u spring -x java); do java_bin=$(readlink -f "/proc/$pid/exe") && jcmd="$(dirname "$java_bin")/jcmd" && [ -x "$jcmd" ] && "$jcmd" "$pid" GC.run; done >/dev/null 2>&1Суть:
pgrep -u spring -x java находит все процессы с именем java, принадлежащие пользователю spring.
Для каждого PID через /proc/$pid/exe определяется реальный исполняемый файл Java.
Рядом с найденным java ищется соответствующий jcmd:
jcmd="$(dirname "$java_bin")/jcmd"Если jcmd существует и исполняемый, выполняется:
jcmd PID GC.runКоманда инициирует Full GC внутри соответствующей JVM.
jcmd должен иметь возможность подключиться к JVM. Сron следует запускать от пользователя spring или от root. Если jcmd отсутствует рядом с используемым java, эта JVM будет молча пропущена.