Недавно мы достигли максимального количества открытых файлов для некоторых служб. Есть также множество других ограничений. Есть ли способ отслеживать, насколько процессы близки к этим ограничениям, чтобы мы могли быть предупреждены, когда пришло время либо увеличить пределы, либо устранить основную причину? В том же примечании, можно ли просмотреть журнал этих событий, чтобы мы знали, что сбой происходит из-за достижения одного из этих пределов?
Предполагая сервер 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
Да, ты можешь. /proc/<pid>/fd
перечисляет все дескрипторы открытых файлов. Использование памяти можно увидеть в /proc/<pid>/{maps,smaps}
. Просто просмотрите /proc/<pid>
немного и файлы Google, которые вы не понимаете :)