ulimit 사용법을 확인하는 방법 사용자에 대한

주어진 사용자에 대한 ulimits 사용법을 확인할 수있는 방법이 있습니까? 시작시 단일 프로세스 또는 실행시 단일 셸에 대해 ulimits를 변경할 수 있지만 사용자가 한계에 얼마나 근접했는지 “모니터링”하고 싶습니다. bash현재 사용량 백분율을 다시 통계 하는 스크립트를 작성 하려고합니다. 특히, 나는 추적하고 싶다 :

  1. 열린 파일 (ulimit -n )
  2. 최대 사용자 프로세스 (ulimit -u )
  3. 보류중인 신호 ( ulimit -i)

내가 원하는 것은 사용량 (0-100)입니다.



답변

아마도 이것은 첫 번째 질문에 도움이 될 것입니다.

특정 사용자의 프로세스 ID (PID)를 알고있는 경우 다음을 통해 각 프로세스에 대한 제한을 얻을 수 있습니다.

cat /proc/<PID>/limits

다음을 사용하여 각 PID에 대해 열린 파일 수를 얻을 수 있습니다.

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

그런 다음 값을 Max open files두 번째 명령의 열린 파일 설명자 수와 비교하여 백분율을 얻으십시오.


답변

몇 가지 불편한 방법과 표준 도구를 사용하여 현재 사용자의 열린 파일, proc 및 보류중인 신호의 백분율을 출력합니다.

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,


답변

Ulimits는 프로세스의 속성이며 자식 프로세스로 상속됩니다.

다른 프로세스에 대한 한계를 얻을 수 없습니다.