Мониторинг лимитов открытых файлов

В последнее время мы достигли максимального количества открытых файлов для нескольких сервисов. Есть также множество других ограничений. Есть ли способ контролировать, насколько близки процессы к этим пределам, чтобы мы могли получать оповещения, когда пришло время либо увеличить пределы, либо устранить первопричину? На той же ноте, возможно ли просмотреть журнал этих событий, чтобы мы знали, когда происходит сбой, из-за нарушения одного из этих ограничений?

2 ответа

Решение

Да, ты можешь. /proc/<pid>/fd перечисляет все дескрипторы открытых файлов. Использование памяти можно увидеть в /proc/<pid>/{maps,smaps}, Просто просмотрите /proc/<pid> немного и гугл файлы ты не понимаешь:)

Предполагая сервер Linux.

увидеть глобальные максимальные открытые файлы:

cat /proc/sys/fs/file-max

просмотреть глобальные текущие открытые файлы:

cat /proc/sys/fs/file-nr

изменить глобальные максимальные открытые файлы:

sysctl -w fs.file-max=1000000 or edit sysctl.conf

см лимит для текущего пользователя:

ulimit -Hn   (hard limit)
ulimit -Sn   (soft limit)

изменить лимит на пользователя: изменить /etc/security/limit.conf установить ограничения для веб-сервера, например

apache2 soft nofile 4096
apache2 hard nofile 10000

Вы можете иметь сценарий пройти /proc и дает вам некоторую статистику:

for pid in $(pgrep apache2); do ls /proc/$pid/fd | wc -l; done
Другие вопросы по тегам