Что бы вы там себе не думали, а зомби существуют. И они действительно едят мозги. Не человеческие, правда, а компьютерные. Я говорю сейчас о зомби-процессах и потребляемых ими ресурсах. Это будет душераздирающая история о потерянных и снова найденных 32 ГБ оперативной памяти.
Возможно, лишь некоторые из вас столкнутся с точно такой же проблемой, но если вдруг это произойдёт — у вас хотя бы будет шанс понять, что происходит.
Начнём с того, что компьютеры под управлением ОС Windows склонны со временем терять память. Ну, по крайней мере, у меня, при моём способе ими пользоваться. После пары недель без перезагрузок (или, например, всего одного уикэнда за который я 300 раз пересобрал Хром) я стал замечать, что диспетчер задач начинает показывать мне очень маленькое количество свободной оперативной памяти, но в то же время в системе нет никаких процессов, которые эту самую память активно используют. В том примере выше (с 300 сборками Хрома) диспетчер задач сказал мне, что в системе занято 49.8 ГБ плюс ещё 4.4 ГБ памяти сжато — но при этом запущено всего несколько процессов, и все они в сумме даже и близко не используют столько памяти:
Танцующий зомби!!!!
В моём компьютере 96 ГБ оперативной памяти (да, я счастливчик) и когда у меня нет вообще никаких запущенных процессов — я, знаете ли, хотел бы видеть ну хотя бы половину этой памяти свободной. Я правда рассчитываю на это. Но иногда этого достичь не удаётся и мне приходится перезагружать ОС. Ядро Windows написано качественно и надёжно (без шуток), так что память не должна бы пропадать бесследно. Но всё же она пропадает.
Первой же моей догадкой стало воспоминание о том, что один из моих коллег как-то жаловался на зомби-процессы, которые иногда остаются в ОС уже не активными, но всё же ещё не до конца удалёнными ядром. Он даже написал специальную утилиту, которая выводит список таких процессов — их имена и количество. Когда он запускал эту утилиту в своих тестах, то получал до нескольких сотен зомби-процессов на обычной Windows-машине. Я нашел его инструмент, запустил на своём компьютере и получил… 506 000 зомби-процессов. Да, 506 тысяч!
Я вспомнил, что одной из возможных причин перехода процесса в состояние «зомби» может быть то, что какой-то другой процесс держит открытым его дескриптор (handle). В моём случае большое количество зомби-процессов играло мне на руку — им было сложнее скрыться. Я просто открыл диспетчер задач и добавил на вкладку Details столбец с количеством открытых дескрипторов для каждого процесса.
Затем отсортировал список по убыванию значений в этом столбце. Я сразу нашел героя данной истории — процесс CcmExec.exe (часть Microsoft System Management Server) имел 508 000 открытых дескрипторов. Это было во-первых, очень много, а во-вторых, подозрительно близко к найдненному мною выше числу в 506 000 зомби-процессов.
КАК И ЗАЧЕМ ПРИДУМАЛИ ЗОМБИ?
Я убил процесс CcmExec.exe и получил следующий результат:
Всё получилось ровно так, как я того и ожидал. Как я без иронии писал выше — ядро Windows написано очень хорошо и когда процесс уничтожается, то и все занятые им ресурсы освобождаются. Закрытие CcmExec.exe освободило 508 000 дескрипторов, что дало возможность окончательно закрыть 506 000 зомби-процессов. Количество свободной оперативной памяти мгновенно выросло на 32 ГБ. Тайна раскрыта!
Что такое зомби-процесс?
До этого момента мы ещё не выяснили, что же заставило все эти процессы зависнуть в неопределённости, а не быть удалёнными. Похоже на то, что мы имеем дело с тривиальным багом в приложении (а не в ядре ОС). Общее правило гласит, что когда вы создаёте процесс, то получаете его дескриптор и дескриптор его главного потока. Вы ОБЯЗАНЫ закрыть эти дескрипторы.
Если вашей задачей было просто запустить процесс — их можно закрыть сразу же (это не убъёт запущенный процесс, а просто разорвёт связь вашего процесса с ним). Если новый процесс вам для чего-то нужен (например, вы ждёте окончания его работы или вам нужен код, который он вернёт) — то нужно воспользоваться соответствующими функциями (например, WaitForSingleObject(hProcess, INFINITE) для ожидания выхода или GetExitCodeProcess(hProcess, https://habr.com/ru/companies/infopulse/articles/349924/» target=»_blank»]habr.com[/mask_link]
Как создать фиктивный зомби-процесс в Ubuntu
Как тестировщикам программного обеспечения, нам иногда необходимо знать, как выглядит зомби-процесс в нашей системе. Мы можем проводить различные тесты на нем, если знаем, какая программа и идентификатор процесса связаны с этим зомби-процессом.
Что такое зомби-процесс?
Зомби или неработающий процесс в Linux — это процесс, который был завершен, но его запись все еще остается в таблице процессов из-за отсутствия соответствия между родительским и дочерним процессами. Обычно родительский процесс следит за состоянием своих дочерних процессов с помощью функции wait(). Когда дочерний процесс завершает свою работу, функция wait сигнализирует родительскому процессу о полном выходе процесса из памяти. Однако если родительский процесс не вызывает функцию ожидания для любого из своих дочерних процессов, то дочерний процесс остается живым в системе как мертвый или зомби-процесс. Эти зомби-процессы могут накапливаться в большом количестве в вашей системе и влиять на ее производительность.
Однако если в вашей системе нет запущенного зомби-процесса, вы можете создать фиктивный процесс для целей тестирования, как описано в этой статье.
Создание зомби-процесса
В этом разделе мы напишем программу на языке C для запуска зомби-процесса в нашей системе.
nano zombie.c
Откройте текстовый редактор и введите следующий код:
#include #include #include int main () < pid_t child_pid;child_pid = fork (); if (child_pid >0) < sleep (60); >else < exit (0); >return 0; >
Сохраните этот файл под именем zombie.c
Зомби-процесс, созданный с помощью этого кода, будет работать в течение 60 секунд. Вы можете увеличить продолжительность времени, указав время (в секундах) в функции sleep().
Откройте терминал и выполните следующую команду для компиляции этой программы:
cc zombie.c -o zombie
Теперь будет создан исполняемый файл с именем zombie.
Обратите внимание, что вам нужно будет установить компилятор GNU C, если он еще не установлен в вашей системе, выполнив следующую команду:
sudo apt-get install build-essential
Теперь запустите программу zombie с помощью следующей команды:
./zombie
Вы можете использовать ID родительского процесса (PPID) и ID дочернего процесса (PID) во время тестирования; например, убив этот зомби-процесс с помощью команды kill.
Пока этот процесс запущен, вы можете просмотреть производительность системы в другом окне терминала с помощью команды top. Вы сможете увидеть 1 зомби-процесс во второй строке вывода.
Команда ps теперь также покажет этот неработающий процесс и зомби-программу, ответственную за него:
ps axo stat,ppid,pid,comm | grep -w defunct
Эта команда покажет вам состояние, parentID, ID процесса, программу, которая запускает зомби-процесс (программа-зомби, которую мы запускали в этом уроке).
Теперь вы узнали, как создать простой фиктивный зомби-процесс. Это даст вам представление о том, как он выглядит в вашей системе и как его можно использовать в целях тестирования.
Похожие записи:
- Как использовать apt для установки программ из командной строки в Debian
- Проверить версию Linux
- Как создавать и редактировать PDF-файлы в Ubuntu
- Как установить рабочий стол KDE Plasma в Ubuntu
- Как закомментировать строки в конфигурационных файлах в Linux
- Как установить Winamp в Ubuntu с помощью PlayOnLinux
- Как настроить пул хранения ZFS в Ubuntu
Источник: g-soft.info
Что такое зомби в компьютерных технологиях?
В компьютерной науке зомби -это компьютер, подключенный к сети, который был взломан хакером, компьютерным вирусом или трояном. Его можно использовать для удаленного выполнения различных вредоносных задач.
Большинство владельцев компьютеров-зомби не знают, что их система используется таким образом, поэтому их можно сравнить с ходячими мертвецами. Кроме того, они используются в DDoS-атаках, скоординированных с несколькими ботнет-машинами, которые напоминают атаки зомби-орды, например, одной из тех, которые появляются в фильмах ужасов.
Для чего они используются?
Зомби часто используются для выполнения атак типа «отказ в обслуживании» (DDOS), термин, который относится к организованному насыщению веб-сайтов из-за наплыва большого количества компьютеров одновременно. Большое количество пользователей, которые делают одновременные запросы к серверу, на котором размещена определенная страница, призвано вызвать блокировку и запретить доступ законным пользователям.
Вариант такого типа насыщения известен как распределенное ухудшение качества сервиса и начинается с так называемых пульсирующих зомби: модулированное ухудшение качества сервиса за счет периодического насыщения сайтов низкой интенсивности; это сделано с целью замедлить, а не заблокировать сайт жертвы. Такие зомби-атаки представляют собой сложный тип атаки, связанной с вышеупомянутым замедлением доступа к сайту. Такой вид атаки может оставаться незамеченным в течение месяцев или даже нескольких лет или быть спутанным с другими проблемами.
Компьютеры-зомби часто использовались для рассылки спама по почте. В 2005 году было подсчитано, что от 50 до 80% всего спама, циркулирующего в сети, было отправлено компьютерами этого типа. Этот метод очень полезен для преступников, потому что он позволяет им избежать обнаружения и, в то же время, снизить затраты на пропускную способность сети.
Этот вид мошенничества со спамом также очень способствует распространению троянских программ, так как этот тип вредоносных программ не воспроизводит сам себя, а для распространения использует электронную почту; в отличие от червей, которые могут распространяться другими способами. По тем же причинам зомби также используются для мошенничества с сайтами, которые отображают контекстную рекламу с оплатой за клик, искусственно раздувая цифры.
Самые важные атаки
В 2000 году несколько очень известных веб-сайтов (таких как Yahoo или eBay) были парализованы из-за распределенной атаки на отказ в обслуживании со стороны канадского подростка, использующего псевдоним Mafiaboy. Впоследствии за этой моделью последовали другие крупномасштабные атаки типа «отказ» и «деградация», такие как атака на службы предотвращения спама, такая как SPEWS в 2003 году, и атака на Blue Frog в 2006 году.
В 2010 году, преступная сеть, которая дистанционно контролировала около тринадцати миллионов зараженных компьютеров – 200 000 в Испании – под названием Mariposa, была раскрыта в Испании Группой телематических преступлений Центрального оперативного подразделения Гражданской гвардии (УКО). И виновные были арестованы. В их распоряжении были данные о 800 000 человек из 190 стран.
Как защитить себя
Здравый смысл и осторожность являются основным барьером безопасности для предотвращения таких угроз. Среди общих рекомендаций – избегать просмотра небезопасных сайтов, подозрительных загрузок и не переходить по ссылкам в сомнительных сообщениях.
Рекомендуется избегать непрофессиональных сред и неизвестных компаний, делать все загрузки от защищенных поставщиков и активировать и поддерживать механизмы безопасности на компьютерах, такие как антивирус, антиспам или брандмауэр.
Источник: bezopasnik.info