사용자당 프로세스 및 포크 수를 추적하는 방법은 무엇입니까?

사용자당 프로세스 및 포크 수를 추적하는 방법은 무엇입니까?

시간이 지남에 따라 완료된 포크 수와 사용자당 실행 중인 동시 프로세스 수를 파악해야 합니다. 내 배포판에서는 이 정보를 추적하지 않는 것 같습니다.

제한을 설정하는 방법을 알고 있지만 사용자당 이러한 숫자를 추적하고 싶습니다.

답변1

해당 psacct패키지(GNU Accounting)를 사용해 보십시오. 필요한 모든 작업을 수행해야 하며 일단 설치 및 활성화되면( accton) 사용자 프로세스에 대한 보고서를 유지합니다( 및 lastcomm참조 ). 참고로 다음을 참조하세요.sadump-acct사용자가 실행한 명령의 로그 파일

PID/PPID를 기록하려면 버전을 업그레이드해야 할 수도 있습니다.https://serverfault.com/questions/334547/how-can-i-enable-pid-and-ppid-fields-in-psacct-dump-acctfork(), 그렇지 않으면 no 를 과소보고할 것으로 의심됩니다 exec().

고쳐 쓰다lastcomm출력이 두 번째 열에 있으면 F프로세스가 포크임을 의미합니다( exec()새 프로세스로 대체하면 호출되지 않음). 산출dump-acct ~해야 한다Acct v3 형식으로 PID(및 PPID)를 표시합니다.

psacct에 대한 대안은 taskstats아직 지원이 많지 않은 새로운(ish) AFAICT일 수 있습니다. Documentation/accounting/taskstats.txt커널 버전 소스를 참조하세요. 시작하는 데 도움이 될 수 있습니다.http://code.google.com/p/arsenalsuite/wiki/TrackingIOUsage https://code.google.com/archive/p/anim-studio-tools/ 구체적인 코드 예는 함수의 줄을 tasklogger.c수정하고 먼저 유형을 바꾼 다음 사용자가 추적해야 하는 필드를 추가해야 한다는 것입니다. 다음과 같은 것을 사용하여 호출하십시오(CPU 0-1을 의미함). 그러면 각 프로세스가 종료될 때마다 실시간 세부 정보가 표시됩니다.printf()print_delayacct2()%u%llu__u64ac_uidac_gidtasklogger -dl -m 0-1-m 0-1

Perl 모듈도 있습니다Linux::Taskstats::ReadCPAN에서 사용 가능하지만 사용하지는 않았습니다.

원하는 경우 타임스탬프를 기반으로 데이터를 처리해야 합니다.동시에사용자당 프로세스 수는 말처럼 간단하지 않습니다.

업데이트 2 좋습니다. 필요한 지원을 확인해야 할 사항은 다음 psacct과 같습니다.

  1. (공식) v3 계정 지원(또는 백포트)을 위한 커널 >= 2.6.8
  2. 커널이 활성화 CONFIG_BSD_PROCESS_ACCT되었습니다CONFIG_BSD_PROCESS_ACCT_V3
  3. psacctv3는 위에서 언급한 회계( ) 패키지를 지원합니다 .

무엇보다도~해야 한다실제로 CentOS 6의 경우입니다. 5.x를 확인해보니확실히CONFIG_BSD_PROCESS_ACCT_V3=y, 따라서 이를 활성화하려면 커널을 다시 빌드해야 합니다.

원래 버전은 psacct-6.3.2약 15년 ​​전이며 Red Hat/CentOS 버전은 v3 및 PID 디스플레이 지원으로 백포트되었습니다(지금은 테스트할 수 없지만 작동할 것입니다).

커널 구성을 확인하려면:

zgrep BSD_PROCESS_ACCT /proc/config.gz /boot/config-`uname -r`

답변2

를 사용하여 하위 PID를 볼 수 있으며 ps -ef, 상위 ID는 포크되거나 생성된 ID입니다. 이를 사용하여 watch정기적으로 스크립트를 실행하고 계산되도록 할 수 있습니다.

답변3

설정할 수 있습니다감사 하위 시스템포크(및 원하는 기타 시스템 호출)를 기록합니다.

auditctl -a exit,always -S clone

관련 정보