주어진 사용자에 대한 ulimits 사용법을 확인할 수있는 방법이 있습니까? 시작시 단일 프로세스 또는 실행시 단일 셸에 대해 ulimits를 변경할 수 있지만 사용자가 한계에 얼마나 근접했는지 “모니터링”하고 싶습니다. bash
현재 사용량 백분율을 다시 통계 하는 스크립트를 작성 하려고합니다. 특히, 나는 추적하고 싶다 :
- 열린 파일 (
ulimit -n
) - 최대 사용자 프로세스 (
ulimit -u
) - 보류중인 신호 (
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는 프로세스의 속성이며 자식 프로세스로 상속됩니다.
다른 프로세스에 대한 한계를 얻을 수 없습니다.