2013-09-20 5 views
3

У меня есть Java-программа, которая в какой-то момент превращается в 100% использование процессора и состояние сна одновременно. Программа не является многопоточной.JVM - Goes 100% загрузка процессора

Оглядываясь вокруг, я думаю, что наиболее вероятной причиной этого является ошибка или некорректность в том, как я запускаю java-интерпретатор в отношении сбора мусора. Я могу только думать, что использование 100% CPU связано с GC. Я выделяю достаточно памяти для запуска программы с помощью Xmx, и программа не запускается даже около суммы, которую я выделяю. Сумма, которую я выделяю, также намного меньше, чем общая память, доступная на машине.

Я нашел это:

http://code.google.com/p/spymemcached/issues/detail?id=279

Были также некоторые упоминания о том, что на stackoverflow.com, такие как здесь:

CMS garbage collector - when does it run?

Тем не менее я не мог найти решение , Является ли это ошибкой в ​​JVM, и если да, то как бы я ее исправить?

EDIT: Я добавил пасту на выходе jstack здесь: http://pastebin.com/Au0V9FCN

+0

Получить дамп стека с помощью 'jstack', чтобы увидеть, что там происходит. Через какое-то время происходит 100% -ное использование? – Thilo

+0

никогда не опускается, нет. – kloop

+0

Затем получите выход jstack. – Thilo

ответ

3

Воспроизведите проблему, и когда вы видите CPU насыщен выполнять JSTACK отвалов на вашем процессе Java и использовать утилиту ОС для захвата процесса CPU и его потоки CPU разбиваются (ps -L в linux). Фактически вы должны настроить сценарий, который делает это примерно в 10 или 20 раз с интервалом в 1 секунду.

После этого, если вы работаете в Linux, вы можете перекрестно ссылаться на LWPid с выходом JSTACK, просто преобразуйте LWPID из ps -L в hex, и вам должно быть хорошо, чтобы выходить на выход JSTACK.

На этом этапе вы получите четкое представление о том, что потребляет процессор в вашем приложении.

Если проблема с GC - это проблема, вы увидите, что потоки GC засоряют процессор, в этот момент JConsole будет полезен для определения дальнейшей основной причины. В противном случае вы четко заметите, кто несет ответственность за потребление ЦП, и вы можете действовать соответствующим образом.

P.S. Мои примеры на linux, если вы не используете linux, вы можете google вверх, чтобы заставить процессор разбивать дампы.

Дайте мне знать, что вы узнали.

Смежные вопросы