На нескольких машинах у меня проблема с процессом, который использует 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:
Всякий раз, когда я вижу, что 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 для подробностей.