Сколько открытых файлов для каждого процесса выполняется для конкретного пользователя в 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. Это похоже на то, что у вас есть веб-приложение, которое не закрывает дескрипторы файла. Я бы сосредоточил свои усилия на этой области.