Разница между ULIMIT, LSOF, CAT / PROC / SYS / FS / FILE-MAX

Это будет работать, если вам не нужно следить за выводом и вы не против оставить сеанс ssh открытым до тех пор, пока выполняются скрипты. Если ни одно из этих условий не верно, я бы рекомендовал использовать screen с несколькими вкладками. Вы можете сделать что-то вроде

screen
for script in script_A script_B script_C; do
  screen -t "$script" ./$script
done;
4
18.10.2018, 18:04
2 ответа
  1. file-max— это максимальное количество файлов, которые можно открыть во всей системе. Это обеспечивается на уровне ядра.

  2. На справочной странице для lsofуказано, что:

In the absence of any options, lsof lists all open files belonging to all active processes.

Это согласуется с вашими наблюдениями, поскольку количество файлов, указанное в lsof, значительно ниже параметра file-max.

  1. Наконец, ulimitиспользуется для принудительного ограничения ресурсов на уровне пользователя. Параметр «количество открытых файлов» задается на уровне пользователя, но применяется к каждому процессу, запущенному этим пользователем. В этом случае один процесс Kafka может иметь до 1024 дескрипторов файлов, открытых (мягкое ограничение ).

Вы можете поднять это ограничение самостоятельно до жесткого предела, 4096. Чтобы поднять жесткий предел, требуется root-доступ.

Если Kafka работает как отдельный процесс, вы можете узнать количество файлов, открытых этим процессом, используя lsof -p [PID].

Надеюсь, это прояснит ситуацию.

8
20.08.2021, 11:10

Распространенной ошибкой :является сравнение результатов необработанного lsofвызова с предполагаемым лимитом.

Глобальный лимит(/proc/sys/fs/file-max)вы должны посмотреть на /proc/sys/fs/file-nr; первое значение указывает, что используется, а последнее значение является пределом.

Ограничение OpenFile для каждого процесса, но оно может быть определено для пользователя; см. команду ulimit -Hnдля пользовательских ограничений и см. /etc/security/limits.confдля определений. Обычно применяется с «пользователем приложения», например :«tomcat» :устанавливает ограничение в 65000 для пользователя tomcat, который будет применяться к запущенному процессу Java.

Если вы хотите проверить ограничения, применяемые к процессу, получите его PID, а затем:

cat /proc/${PID}/limits

Если вы хотите проверить, сколько файлов открыто процессом, получите его PID, а затем:

ls -1 /proc/${PID}/fd | wc -l(примечание для ls это «минус один», не путать с «минус el»)

Если вы хотите узнать подробности с помощью lsof, но только для тех дескрипторов файлов, которые учитываются в ограничении, попробуйте эти:

lsof -p ${PID} | grep -P "^(\w+\s+){3}\d+\D+"

lsof -p ${PID} -d '^cwd,^err,^ltx,^mem,^mmap,^pd,^rtd,^txt' -a

Замечание :«файлы» — это файлы / pipe / tcp-соединения / и т. д.

Обратите внимание, что иногда вам, вероятно, потребуется root или использовать sudo, чтобы получить правильный результат для команд; без привилегий иногда вы не видите ошибку, вы просто получаете меньше результатов.

Наконец, если вы хотите знать, к каким файлам в вашей файловой системе обращается процесс,посмотри на:

lsof -p ${PID} | grep / | awk '{print $9}' | sort | uniq

5
20.08.2021, 11:10

Теги

Похожие вопросы