Linux에 존재하는 각 유형의 활성 네임스페이스 수를 확인할 수 있는 방법이 있습니까? 예를 들어:
- NS 설치:20
- 순 NS: 40
- 등.
답변1
그러면 아래 링크를 반복하여 /proc/*/ns
각 유형의 활성 네임스페이스 수를 계산합니다.즉하나 이상의 프로세스를 포함하는 네임스페이스:
sudo find /proc/*/ns -type l -printf "%l\n" |
gawk -F'[:\\[\\]]+' '{ nss[$1][$2] = 1 } END { for (ns in nss) { print ns ": " length(nss[ns]) } }'
다양한 식별자의 수를 세고 네임스페이스 유형별로 그룹화하는 방식으로 작동합니다.
위에서는 이를 고려하지 않았지만 다른 곳에 네임스페이스를 바인딩하여 마운트하면 프로세스 없이 네임스페이스를 활성 상태로 유지할 수 있습니다.
답변2
lsns(1)
util-linux 패키지 [1]의 명령을 사용하여 이 작업을 수행 할 수 있습니다 .
lsns -n | awk '{n[$2]++}END{for(k in n) print k"\t"n[k]}'
net 2
cgroup 1
...
그런데 lsns
고장났어요: 스레드별 네임스페이스나 핸들을 열거나 마운트를 바인딩해야만 활성 상태로 유지되는 네임스페이스는 표시되지 않습니다. 이 모든 것을 얻으려면 lsnsx.pl
내 다른 스크립트를 사용해보십시오.답변:
# perl ./lsnsx.pl | grep -v '^ '
cgroup 1
ipc 1
mnt 3
net 5
...
[1] 사용 중인 컴퓨터에 해당 컴퓨터(예: busybox)가 없는 경우 lsns
다음에서 직접 이 정보를 추출할 수 있습니다 /proc/*/ns/*
.
for f in /proc/[0-9]*/ns/*; do readlink "$f"; done | awk -F: '!t[$2]++{c[$1]++}END{for(k in c)print k"\t"c[k]}'
/proc/[0-9]*/ns
스레드별 네임스페이스를 얻 도록 변경할 수도 있지만 /proc/[0-9]*/task/[0-9]*/ns
적당히 사용되는 시스템에서는 속도가 매우 느려집니다.