특정 사용자의 ulimit 사용량을 확인할 수 있는 방법이 있습니까? 시작 시 개별 프로세스 또는 런타임 시 개별 셸에 대한 ulimit를 변경할 수 있다는 것을 알고 있지만 사용자가 한계에 도달하는 정도를 "모니터링"할 수 있기를 바랍니다. bash
현재 사용률을 statsd에 보고하는 스크립트를 작성할 계획입니다 . 특히 다음을 추적하고 싶습니다.
- 파일 열기(
ulimit -n
) - 최대 사용자 프로세스 수(
ulimit -u
) - 보류 중인 신호(
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는 프로세스의 속성이며 하위 프로세스에 상속됩니다.
다른 프로세스의 한계를 얻을 수 없습니다.