вам нужно получить больше данных, чтобы знать, что происходит, только тогда вы узнаете, что нужно исправить.На мой взгляд, это означает, что
получить подробную информацию о том, что делает сборщик мусора, эти параметры - хорошее начало (вместо gc.log вместо файла gc.log следует указать какой-нибудь предпочтительный путь и файл)
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -Xloggc:gc.log -verbose:gc
повторить прогон, отсканировать журнал gc за период, когда он зависает, и отправить с этим выводом
рассмотрите возможность просмотра вывода с использованием visualgc (требуется, чтобы на сервере был запущен jstatd, одна случайная ссылка, объясняющая, как выполнить эту настройку, эта ), которая является частью jvmstat , thisЭто простой способ увидеть, как измеряются различные поколения в куче (хотя, возможно, не в течение 6 часов!)
Я также настоятельно рекомендую вам кое-что почитать, чтобы вы знали, что все этопереключатели имеют в виду иначе вы будете слепо пробовать вещи без реального понимания того, почему одна вещь помогает, а другая нет.Я бы начал со страницы настройки oracle java 6 gc, которую вы можете найти здесь
Я бы предложил изменять параметры только после того, как вы добились базовой производительности.Сказав, что CompressedOops
v скорее всего будет легким выигрышем, вы можете заметить, что по умолчанию он включен с 6u23.
Наконец, вы должны рассмотреть вопрос об обновлении jvm, 6u18 немного встает ипроизводительность продолжает улучшаться.
выполнение каждого задания занимает 3 часа, и почти 6 заданий выполняются одно за другим.Последнее задание при запуске достигает 8 ГБ макс и зависает в prod
Эти задания вообще связаны?это действительно звучит как постепенная утечка памяти, если они не работают с одним и тем же набором данных.Если использование кучи продолжает увеличиваться и в конечном итоге вылетает, значит, у вас утечка памяти.Вы должны рассмотреть возможность использования -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/some/dir
для захвата дампа кучи (хотя обратите внимание, что с кучей 13G это будет большой файл, поэтому убедитесь, что у вас есть место на диске), если / когда он дует.Затем вы можете использовать jhat , чтобы посмотреть, что было в куче в то время.