시간이 지남에 따라 완료된 포크 수와 사용자당 실행 중인 동시 프로세스 수를 파악해야 합니다. 내 배포판에서는 이 정보를 추적하지 않는 것 같습니다.
제한을 설정하는 방법을 알고 있지만 사용자당 이러한 숫자를 추적하고 싶습니다.
답변1
해당 psacct
패키지(GNU Accounting)를 사용해 보십시오. 필요한 모든 작업을 수행해야 하며 일단 설치 및 활성화되면( accton
) 사용자 프로세스에 대한 보고서를 유지합니다( 및 lastcomm
참조 ). 참고로 다음을 참조하세요.sa
dump-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
__u64
ac_uid
ac_gid
tasklogger -dl -m 0-1
-m 0-1
Perl 모듈도 있습니다Linux::Taskstats::Read
CPAN에서 사용 가능하지만 사용하지는 않았습니다.
원하는 경우 타임스탬프를 기반으로 데이터를 처리해야 합니다.동시에사용자당 프로세스 수는 말처럼 간단하지 않습니다.
업데이트 2
좋습니다. 필요한 지원을 확인해야 할 사항은 다음 psacct
과 같습니다.
- (공식) v3 계정 지원(또는 백포트)을 위한 커널 >= 2.6.8
- 커널이 활성화
CONFIG_BSD_PROCESS_ACCT
되었습니다CONFIG_BSD_PROCESS_ACCT_V3
psacct
v3는 위에서 언급한 회계( ) 패키지를 지원합니다 .
무엇보다도~해야 한다실제로 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