Рейтинг:0

Как отслеживать открытые файлы и убивать их PID с помощью сценария оболочки?

флаг fr

Моя система выдает мне сообщение об ошибке «Слишком много открытых файлов». Я исследовал эту ошибку и оказалось, что /usr/bin/uwsgi создал сокетов (?) более 1020. Если он создает более 1020, я думаю, возникает вышеуказанная ошибка.

Итак, что я пытаюсь сделать, так это запустить сценарий оболочки, который отслеживает количество открытых файлов и, если оно превышает 1000, убивает его PID, чтобы устранить эту ошибку на данном этапе.

#uwsgimonitor.sh
#!/бин/баш

#filename=/usr/bin/uwsgi

имя_файла=/usr/bin/uwsgi
Cnt= lsof | awk '/uwsgi/ {print $1,$2}' | уникальный -c | сортировать -r | голова -1 | awk '{напечатать $1}'
PROCESS_ID = lsof | awk '/uwsgi/ {print $1,$2}' | уникальный -c | сортировать -r | голова -1 | awk '{напечатать $2}'

если [ $Cnt gt 1000 ]
тогда
    echo "Обнаружено, что количество открытых сокетов превышает $Cnt."
    убить -9 $PROCESS_ID
еще
    эхо "" #нечего делать.
фи

В crontab я добавил эту строку, но, похоже, она не убивает PID, который я имел в виду.

* * * * * sh /home/root/scripts/uwsgimonitor.sh

Что мне не хватает?

Заранее спасибо.

флаг cn
На самом деле это не решит вашу проблему - вам нужно посмотреть, как настроить UWSGI/ваш веб-сервер, чтобы ограничить количество открытых сокетов или разрешить пользователю открывать больше файлов через ulimits.conf.
deokyong song avatar
флаг fr
Я должен был упомянуть фон. Я тестировщик автоматизации, и эта проблема уже исправлена. Между тем, я просто использую этот сценарий оболочки, чтобы предотвратить появление каких-либо сообщений об ошибках. Это просто временное решение для тестирования моего приложения.
Рейтинг:0
флаг fr

Для тех, кто хочет узнать, как прошла моя ситуация.

#!/бин/баш


count=$(lsof | awk '/uwsgi/ {print $1,$2}' | uniq -c | sort -r | head -1 | awk '{print $1}')
PROCESS_ID=$(lsof | awk '/uwsgi/ {print $1,$2}' | uniq -c | sort -r | head -1 | awk '{print $2}')
ожидаемый предел = 1000

echo "открыть сокет:$count"
эхо "pid:$PROCESS_ID"

если [[ ${count} -gt ${expectLimit} ]]
тогда
        echo "Найденный uwsgi превышает лимит: ${expectLimit}"
        убить -9 $PROCESS_ID
еще
        эхо "" #нечего делать.
фи

Этот работает для меня. Спасибо.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.