Процесс зомби с использованием 100% CPU
Процесс зомби, который не должен использовать какие-либо ресурсы (RAM и CPU), загружает все ядро на моей 8-ядерной 64-битной установке Ubuntu 11.10 Desktop.
Это вывод ps -el|grep Z
:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 Z 1000 10317 1 99 80 0 - 0 exit ? 19:27:15 java <defunct>
... и вот выдержка из top
:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10317 deltik 20 0 0 0 0 Z 100 0.0 1170:17 java <defunct>
1424 root 20 0 612m 193m 158m S 14 2.4 287:17.11 Xorg
12580 deltik 20 0 710m 135m 46m S 5 1.7 27:31.07 compiz
Вот как возник процесс зомби:
- Я открыл Java JAR под названием minecraft.jar. Этот модуль запуска загружает другой файл JAR в ~/.minecraft/bin/minecraft.jar
- Этот JAR выполнялся, когда я заблокировал свой компьютер с
xscreensaver
, - Затем я ввел свой пароль, чтобы разблокировать компьютер, и увидел, что окно Minecraft было заморожено.
- Я пытался убить его (PID 10317) с
gnome-system-monitor
, Это стало зомби. kill -9 10317
был неэффективен.xkill
закрылось только окно под названием "Майнкрафт"; это не закрыло основнойjava
процесс.
Релевантная информация:
- Графический драйвер - FGLRX, и он вызвал пресловутые проблемы с Unity of Ubuntu 11.04 и Ubuntu 11.10, включая иногда высокую загрузку ЦП
Xorg
а такжеcompiz
,
Я хочу знать:
- Какой способ разрушить этот процесс
java
без перезагрузки, если есть? - Почему эта проблема происходит?
- Что я могу сделать, чтобы эта проблема не повторилась?
4 ответа
Процесс уже переписан на init
, так что его следует пожинать (иначе, скорее всего, решение будет убить его родителя). Похоже, застрял в exit
, на основе WCHAN
поле.
На самом деле он может что-то делать (например, создавать дамп ядра), который закончится и сам уйдет. К сожалению, он, вероятно, вращается в ядре из-за сломанного драйвера и, в конечном счете, единственным вариантом будет перезагрузка.
Ты пытался sudo kill -SIGCHLD 1
? Если это не работает, вам нужно перезагрузить систему.
Подробнее об этом: https://stackoverflow.com/questions/6335730/zombie-process-cant-be-killed и https://serverfault.com/questions/89759/init-never-reaping-zombie-defunct-processes
Процессы зомби умерли, но еще не были очищены (пожинать - правильный термин) и, таким образом, kill
не работает на них как обычный процесс. Процесс все еще находится в таблице процессов, но когда это зомби, ресурсы были перераспределены.
Вы можете попробовать отправить SIGCHLD
подайте сигнал родителю процесса, в противном случае init должен был его поднять и в конце концов пожнет его. Если вы хотите ускорить процесс, вы можете просто перезагрузиться.
Это ошибка ядра. Вы используете ecryptfs для шифрования вашего домашнего каталога? Об этом сообщается об ошибке на launchpad.net.