ulimit 사용량 확인 방법

ulimit 사용량 확인 방법

특정 사용자의 ulimit 사용량을 확인할 수 있는 방법이 있습니까? 시작 시 개별 프로세스 또는 런타임 시 개별 셸에 대한 ulimit를 변경할 수 있다는 것을 알고 있지만 사용자가 한계에 도달하는 정도를 "모니터링"할 수 있기를 바랍니다. bash현재 사용률을 statsd에 보고하는 스크립트를 작성할 계획입니다 . 특히 다음을 추적하고 싶습니다.

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

내가 원하는 것은 백분율(0-100)을 사용하는 것입니다.

답변1

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

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

cat /proc/<PID>/limits

다음 명령을 사용하여 PID당 열린 파일 수를 얻을 수 있습니다.

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

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

답변2

여러 가지 불편한 방법과 표준 도구를 통해 현재 사용자에 대한 열린 파일, 프로세스 및 보류 중인 신호의 비율을 출력합니다.

paste <(grep 'open files\|processes\|pending signals' \
              /proc/self/limits | cut -c27-38)        \
      <(i=`whoami`
        lsof -n -u $i 2> /dev/null | 
             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 ; ) \
      <(grep 'open files\|processes\|pending signals' \
             /proc/self/limits | 
                   cut -c1-19) | 
while read a b name ; do 
    printf '%3i%%  %s\n' $((${b}00/a)) "$name"
done

내 시스템의 출력:

 16%  Max processes
 12%  Max open files
  0%  Max pending signals

숫자가 괜찮다고 가정하면 이 답변은 셸에서 수행할 수 있음을 시사하지만 더 나은 셸 방식이 없으면 그렇게 해서는 안 됩니다. 대신, 이 질문은 gcc, 또는 python,등.

답변3

ulimit는 프로세스의 속성이며 하위 프로세스에 상속됩니다.

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

관련 정보