Сколько открытых файлов для каждого процесса выполняется для конкретного пользователя в Linux
Запуск Apache и Jboss в Linux, иногда мой сервер неожиданно останавливается, говоря, что проблема была слишком много открытых файлов.
Я знаю, что мы могли бы установить более высокий предел для nproc и nofile в /etc/security/limits.conf, чтобы исправить проблему с открытыми файлами, но я пытаюсь получить более эффективный результат, например, использовать часы для мониторинга их в реальном -time.
В этой командной строке я вижу, сколько открытых файлов на PID:
lsof -u apache | awk '{print $2}' | sort | uniq -c | sort -n
Выход (столбец 1 - это количество открытых файлов для пользователя apache):
1 PID
1335 13880
1389 13897
1392 13882
Если бы я мог просто добавить команду watch, этого было бы достаточно, но код ниже не работает:
watch lsof -u apache | awk '{print $2}' | sort | uniq -c | sort -n
Ответы
Ответ 1
Вы должны ввести цитаты из внутренних правил следующим образом:
watch 'lsof -u apache | awk '\''{print $2}'\'' | sort | uniq -c | sort -n'
или вы можете поместить команду в оболочку script, например test.sh, а затем использовать часы.
chmod +x test.sh
watch ./test.sh
Ответ 2
Эта команда сообщит вам, сколько файлов Apache открыло:
ps -A x |grep apache | awk '{print $1}' | xargs -I '{}' ls /proc/{}/fd | wc -l
Возможно, вам придется запустить его как root, чтобы получить доступ к каталогу процессов fd. Это похоже на то, что у вас есть веб-приложение, которое не закрывает дескрипторы файла. Я бы сосредоточил свои усилия на этой области.