LINUX.ORG.RU
ФорумAdmin

помогите разобраться с kill


0

0

есть продукт от adobe - flash media server, установленный на red hat linux в нем есть процесс - fmsedge который, если без ненужных подробностей, отвечает за подключения пользователей к серверу и получение потока видео.

теперь сама проблемма. данная версия FMS реализована так, что после отключения одного пользователя оперативная память, занятая fmsedge под это подключение, не освобождается. adobe эту проблемму пофиксила, но просит за новую версию некоторое количество килобаксов.

сейчас периодически приходится делать killall -6 fmsedge и проблема решается на короткое время.

если посмотреть pmap-ом пид этого процесса, то можно увидеть многократноповторяющуюся такую картину aed00000 2048K rw--- [ anon ] aef00000 1024K rw--- [ anon ] af000000 1024K rw--- [ anon ] af100000 1024K rw--- [ anon ] af200000 1024K rw--- [ anon ] af300000 1024K rw--- [ anon ] af400000 1024K rw--- [ anon ] af500000 1024K rw--- [ anon ] af600000 1024K rw--- [ anon ] af700000 1024K rw--- [ anon ] af800000 1024K rw--- [ anon ] af900000 1024K rw--- [ anon ] afa00000 1024K rw--- [ anon ] afb00000 1024K rw--- [ anon ]

есть ли какая-то возможность убивать эти висящие процессы и если есть, то как?

з.ы. сорри, что так длинно. не сильно разбираюсь в линуксе и н езнаю как объяснить короче


есть ли какая-то возможность убивать эти висящие процессы

Вообще не понял, какие «эти»? Ты же их и убиваешь - killall -6 fmsedge - убить все процессы fmsedge сигналом АБОРТ.

vga ★★
()

а как определить, завис процесс или нет? по объёму используемой памяти? по загрузке процессора? какие симптомы у больного пациента? :)

arsi ★★★★★
()
Ответ на: комментарий от vga

отвлекли, забыл написать :)

проблема в том, что если убить все процессы, то те пользователи, которые смотрят виде в данный момент тоже пострадают.

вопрос именно в том - можно ли каким-то образом убивать только «старые» процессы.

gel
() автор топика
Ответ на: комментарий от arsi

очевидные симптомы пока не найдены есть процессы, которые занимают 2 Мб, есть которые 1. пожалуй это все отличие.

а, ну и адрес процесса (af000000, af100000, af200000) были мысли убивать процессы с определенным диапазоном адресов, но не смог найти можно ли это реализовать

gel
() автор топика
Ответ на: комментарий от gel

Может у них сокеты закрытые? Глян lsof -p пид_процесса.

Ну а убивать по условию просто

for pid in $(pgrep fmsedge); do 
  pmap $pid | grep -q af000000 && kill  -6 $pid 
done

Как-то так

vga ★★
()
Ответ на: комментарий от vga

>Может у них сокеты закрытые? Глян lsof -p пид_процесса.

видимо не закрытые. судя по тому, что реально сейчас порядка 130 пользователей смотрят видео, а lsof выводит под 300 записей

gel
() автор топика
Ответ на: комментарий от gel

ну, если по памяти… вот, например, получить список всех pid’ов с именем процесса «fmsedge» и RSS ⩾ 2000 килобайт:

echo `ps -eo 'rss:1,pid:1,comm' | grep -P '^\s*([2-9]|\d{2,})\d{3}\s\d+\sfmsedge$' | cut -d' ' -f2`
если заменить «echo» на «kill -6» получите свой профит ;) хотя да, выборка по размеру RSS — не самый лучший выход…

arsi ★★★★★
()

по netstat получаешь активные конекты (ESTABLISHED), по lsof все что связанно с fmsedge, находишь разницу и ее грохаешь

sdio ★★★★★
()
Ответ на: комментарий от sdio

>по netstat получаешь активные конекты (ESTABLISHED), по lsof все что связанно с fmsedge, находишь разницу и ее грохаешь

если не сложно можно прям код плиз. я весьма слаб в линуксе..на то чтоб разобраться может уйти не один день. спасибо

gel
() автор топика
Ответ на: комментарий от sdio

посмотрел сегодня netstat-ом. действительно висит целая куча соединений в time_wait уже не относящихся к какой-то программе(процессу). не мог бы кто-нибудь подсказать как можно убивать все соединения в состоянии time_wait по требованию. спасибо

gel
() автор топика
Ответ на: комментарий от gel

netstat -antp | fgrep =STATE= | tr / " " | awk '{print $7;}' | sort | uniq | xargs -n 1 -P 6 -r kill -KILL

где =STATE= - состояние дохлых процессов. Поскольку

куча соединений в time_wait уже не относящихся к какой-то программе(процессу)

то фильтровать по time_wait смысла нет.

berrywizard ★★★★★
()
Ответ на: комментарий от berrywizard

или даже так

netstat -antp | fgrep =STATE= | tr / " " | awk '{pids[ «» $7 ] = 1;} END {for (k in pids) print k;}' | xargs -n 1 -P 6 -r kill -KILL

berrywizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.