ulimit 사용법을 확인하는 방법


29

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

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

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


커널에서 프로세스 계정을 설정 한 경우 사용자에 대한 자세한 사용 통계를 수집 할 수 있습니다.
케이시

프로세스 회계를 어떻게 설정합니까?
유해 물질

그리고 이것이 얼마나 많은 오버 헤드를 추가합니까?
유해 물질

답변:


22

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

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

cat /proc/<PID>/limits

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

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

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


8

몇 가지 불편한 방법과 표준 도구를 사용하여 현재 사용자의 열린 파일, 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,


-4

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

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


2
무의미한 말. man lsof, man ps, ...
질 'SO-정지 존재 악마'

1
UNIX의 작동 방식과 lsof가 결과를 얻는 방법을 이해하지 못하는 것 같습니다. lsof는 커널 메모리를 읽어 값을 얻습니다. lsof가 사용하는 문서화 된 인터페이스가 없으므로 내부 커널 데이터 구조에 약간의 변경이 있더라도 lsof는 실패합니다.
schily

2
관리자에게는 골치 아픈 일입니다 lsof. 그러나 최종 사용자에게는 적합하지 않습니다. 인터페이스 ( man proc)를 문서화 한 Linux에 대해 특별히 묻기 때문에이 질문의 맥락에서 올바르지 않습니다 .
Gilles 'SO- 악마 그만'

이 경우 예고없이 변경 될 수있는 문서화되지 않은 인터페이스에 대해 이야기하고 있습니다.
schily

1
난 그냥 의견을거야 그래서 난 내 낮은 담당자의 원인을 downvote 수 없습니다-1
귀중한
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.