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