lsof에 비 CPU 집약적 인 대안?


12

우리는 각 호스트가 주어진 시간에 수십만 개의 파일을 여는 Apache Cassandra 클러스터를 실행합니다 .

우리는 주기적으로 열린 파일 수를 얻고이 숫자를 흑연 에 넣을 수 있기를 원 하지만 , lsof아래 collectd에서 실행 하면 그 동안 완료하고 막대한 양의 CPU를 씹는 데 몇 분이 걸립니다. .

lsof가 제공하는 것과 동일한 데이터를 얻거나 CPU에 눈에 띄지 않는 lsof를 실행하는 다른 방법과 친근한 방법이 있는지 궁금합니다. (이 후자의 방법은 현재보다 더 오래 걸리는 것으로 가정하지만 이상적이지 않습니다).

아마도 커널은 열려있는 파일 수를 포함하는 어딘가에 변수를 유지합니까? 소원 생각?

최신 정보:

답변 중 하나에 대한 응답으로 우리는 이미 -band -n플래그를 사용하고 있습니다. 아래에서 실행중인 전체 명령은 다음과 같습니다 collectd.

sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l

답변:


12

소켓의 네트워크 주소를 확인할 필요가 없으므로 -n스위치를 최소한 사용하십시오 . 그런 다음을 사용하여 차단 작업을 건너 뛸 수도 있습니다 -b.

이 두 개의 첫 번째 스위치는 실제로 더 빨라야합니다.

그리고 -luids를 피하기 위해. 그리고 -L링크 계산을 피하기 위해. 등등 lsof 남자를 보십시오 .

또는 Linux를 사용하여 /proc/<PID>/fd다음과 같이 단순히 링크를 계산하는 스크립트를 만들 수 있습니다 .

find /proc -mindepth 3 -maxdepth 3 -type l | awk -F/ '$4 == "fd" { s++ } END { print s }'


나는 항상 얻는다 /proc/{{number}}/fd/5': No such file or directory find: -find : / proc / {{number}} / fdinfo / 5 ': 그런 파일이나 디렉토리가 없다-Q @ Benoît 어떻게 피할 수 있을까?
BG Bruno

2
@BrunoBG : 시도 :echo /proc/*/fd/* | wc -w
Olivier Dulac

Thx @OlivierDulac 그것은 명백한 것 :-)
BG Bruno

좋은 제안이지만 이미 -n 및 -b 옵션을 사용하고 있습니다 .... 더 많은 제안이 필요합니다
Michael Martinez

1
fd가 매우 많으면 @OlivierDulac가 작동하지 않을 수 있습니다.
Benoît

5

당신은 잘못하고있어.

에서 man proc

   /proc/sys/fs/file-nr

이 (읽기 전용) 파일에는 세 개의 숫자가 있습니다. 할당 된 파일 핸들 수 (즉, 현재 열려있는 파일 수); 사용 가능한 파일 핸들 수; 최대 파일 핸들 수 (즉, / proc / sys / fs / file-max와 같은 값) 할당 된 파일 핸들 수가 최대 값에 가까우면 최대 값을 늘려야합니다. Linux 2.6 이전에는 커널 할당 파일이 동적으로 처리되지만 다시 해제하지 않았습니다. 대신 사용 가능한 파일 핸들이 재 할당 목록에 보관되었습니다. "사용 가능한 파일 핸들"값은 해당 목록의 크기를 나타냅니다. 사용 가능한 파일 핸들 수가 많으면 열린 파일 핸들 사용에 과거 피크가 있음을 나타냅니다. Linux 2.6부터 커널은 해제 된 파일 핸들을 할당 해제하고 "

당신이 고양이를 찾는다면 첫 번째 가치는 당신이 무엇을했는지 정확하게 보여줍니다.

기록을 위해 나는 lsof약간의 혼란과도 일치 하는 결과를 얻을 수 없었지만 커널이 당신이 얻는 목록보다 권위있는 것으로 말하면 수집 lsof합니다.


1
내 lsof 출력은 다음과 같습니다 [root@ec2- cassandra101 ~]$ time lsof -b -n -w -l -L | stdbuf -i0 -o0 -e0 wc -l 1018065.. 다음은 file-nr의 내용 [root@ec2- cassandra101 ~]$ cat /proc/sys/fs/file-nr 2784 0 3093428입니다.. 큰 불일치 (1,000,000+ 대 2784)는 lsof파일 설명자와 관련이없는 모든 것 (라이브러리 파일, 실행 가능한 파일 등 )이 포함되어 있기 때문입니다 . 따라서 파일 설명자에만 관심이 있다면 file-nr갈 길입니다, 그렇지 않으면 lsof 또는 동등한 것이 필요합니다.
Michael Martinez

inode-nr대신 같은 위치에서 시도하십시오 .
Matthew Ife
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.