Як перевірити ulimit використання


29

Чи є спосіб перевірити використання ulimits для даного користувача? Я знаю, що ви можете змінити ulimits для одного процесу, коли ви запускаєте його, або для однієї оболонки під час запуску, але я хочу мати можливість "контролювати", наскільки близько користувач досягає їх меж. Я планую написати bashсценарій, який буде звітувати про статистику поточного відсотка використання. Зокрема, я хочу відстежувати:

  1. відкрити файли ( ulimit -n)
  2. максимум користувацьких процесів ( ulimit -u)
  3. очікувані сигнали ( ulimit -i)

Що я хочу, - це відсоток використання (0-100).


якщо у вашому ядрі увімкнено облік процесів, ви можете збирати детальну статистику використання користувачів.
Кейсі

Як увімкнути облік процесів?
хазмат

І скільки накладних витрат це додає?
хазмат

Відповіді:


22

Можливо, це допомагає для першого питання:

Якщо ви знаєте ідентифікатори процесу (PID) конкретного користувача, ви можете отримати обмеження для кожного процесу за допомогою:

cat /proc/<PID>/limits

Ви можете отримати кількість відкритих файлів для кожного PID за допомогою:

ls -1 /proc/<PID>/fd | wc -l

А потім просто порівняйте значення Max open filesз кількістю відкритих дескрипторів файлів з другої команди, щоб отримати відсоток.


8

Виведіть відсоток відкритих файлів, проц і очікуючих сигналів поточного користувача кількома незручними методами та стандартними інструментами:

paste <(grep 'open files\|processes\|pending signals' /proc/self/limits | 
        cut -c27-38) \
      <(i=`whoami` ; lsof -u $i | tail -n +2 | awk {'print $9'} | wc -l; 
                     ps --no-headers -U $i -u $i u | wc -l ; 
                     ps -u $i -o pid= | xargs printf "/proc/%s/status\n" |
                                        xargs grep -s 'SigPnd' |
                                        sed 's/.*\t//' | paste -sd+ | bc ; ) |
while read a b ; do echo $((${b}00/a))%; done

Вихід з моєї системи:

59%
9%
0%

Якщо припустити, що ці числа хороші, то, що ця відповідь показує, що це можна зробити в оболонці, але, мабуть, не повинно, якщо немає набагато кращих методів оболонки. Швидше, це Q краще зробити з gcc, або python, і т.д.


-4

Обмеження - це властивості процесів і передаються у спадок дочірнім процесам.

Ви не можете отримати обмеження для іншого процесу.


2
Дурниці. man lsof, man ps...
Жиля SO- перестати бути злом »

1
Ви, здається, неправильно розумієте, як працює UNIX і як lsof отримує його результати. lsof зчитує пам'ять ядра для отримання значень, немає документально підтвердженого інтерфейсу, який використовує lsof, тому lsof вийде з ладу у випадку, якщо у внутрішні структури даних ядра були внесені незначні зміни.
schily

2
Це головний біль для lsofобслуговуючого персоналу, звичайно. Але не стосується кінцевого споживача. Також неправильно в контексті цього питання, оскільки він конкретно запитує про Linux, який має документовані інтерфейси ( man proc).
Жил "ТАК - перестань бути злим"

Ви говорите про незадокументовані інтерфейси, які можуть бути змінені без попереднього повідомлення в цьому випадку.
schily

1
Я не можу спростувати цю причину моєї низької репутації, тому я просто прокоментую-1
Зун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.