Назад | Перейти на главную страницу

Правильное действие, когда процесс потребляет 100% времени ЦП

На нескольких машинах у меня проблема с процессом, который использует 100% времени ЦП.

USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND

root 85740 100.0 0.2 34668 6352 ?? R 12:06AM 472:20.86 /usr/bin/javad (perl5.12.4)

На данный момент этот процесс длится почти 8 часов:

# ps -p 85740 -o etime=

08:05:25

# ps -auxeww показывает полную команду как: root 29323 99.0 0.2 32292 6692 ?? R 11:21PM 596:50.14 SUDO_COMMAND=/usr/local/bin/bash LOGNAME=root MAIL=/var/mail/root PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/fgz/bin SUDO_GID=1004 OLDPWD=/usr/local PWD=/usr/local/jboss4/bin _=./start.sh TERM=xterm USER=root HOME=/root SHELL=/usr/local/bin/bash SUDO_USER=fgz SUDO_UID=1004 USERNAME=root JBOSS_HOME=/usr/local/jboss4 SHLVL=1 /usr/bin/javad (perl5.12.4)

На этом конкретном компьютере у нас установлен JBoss AS (а также на других).

Я был бы признателен за любые подсказки, как источник, который запускает этот процесс. В /etc/crontab или crontab -l У меня нет действий, которые запускали бы Perl.

И что интересно:

# ls -al /usr/bin/javad

ls: /usr/bin/javad: No such file or directory

Пока процесс еще запущен.

Другие запущенные процессы Java:

USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND

root 1322 0.0 0.0 14688 1344 0- I 24Jun13 0:00.00 /bin/sh ./run.sh -b 10.0.5.9

root 1334 0.0 11.8 2465148 493584 0- I 24Jun13 40:40.66 [java]

куда run.sh это сценарий начальной загрузки JBoss.

Ваш ошибочный процесс - результат старого эксплойта JBoss:

https://developer.jboss.org/blogs/mjc/2011/10/20/statement-regarding-security-threat-to-jboss-application-server

Всякий раз, когда я вижу, что Perl на 100% использует ЦП на машине с JBoss, я готов поспорить, что эта машина была заражена червем.

Буквально сегодня утром я также обнаружил несуществующий / usr / bin / javad, работающий в системе Linux, на которой установлен JBoss AS. Расследование выявило брешь в безопасности - кто-то из Румынии получил доступ к / invoker / JMXInvokerServlet и сумел развернуть «веб-приложение» (да!) На сервере. Вы должны проверить, доступен ли этот «invoker» на вашем сервере. Если да, то следующий вопрос: действительно ли это необходимо? В моем случае я просто удалил его (удалив каталог $ JBOSS_HOME / server / default / deploy / http-invoker.sar), перезапустил JBoss и убедился, что веб-приложение все еще работает.

Вот статья о мониторинге процессов Java: http://www.ibm.com/developerworks/library/j-5things8/

Самый полезный инструмент - это jstack. Если он установлен в вашей системе, используйте его, чтобы показать, что делает занятый процесс. Я должен упомянуть это jstack это инструмент командной строки. Вы используете его вместе с идентификатором загруженного процесса Java. Он должен выдавать дамп стека каждого потока в этом процессе. Большинство потоков должен ждать объекта синхронизации (указывая, что они не заняты, не используют какой-либо ЦП).

Отсутствие существования jstack вы можете послать процессу соответствующий сигнал, но найти место сброса стека может быть непросто. Видеть https://stackoverflow.com/questions/3734696/how-to-get-stack-trace-of-a-thread для подробностей.