일부 실행 중인 프로세스의 리소스 사용량을 모니터링하는 가장 좋은 방법은 무엇입니까? 예를 들어 일정 기간 동안의 CPU 및 메모리 사용량에 대한 로그 파일을 생성하려는 경우입니다.
내가 이해한 바로는 top 또는 ps 명령 사용, 코드에서 sysInfo 명령 사용, /proc/ 디렉터리의 파일 직접 쿼리 등 다양한 옵션이 있습니다. 일부 방법의 장단점은 분명하지만(예: ps는 평균 CPU 사용량을 표시하는 반면 top은 더 즉각적입니다.)질문top에도 몇 가지 문제가 있다는 점을 지적했습니다), 저는 아직 Linux를 처음 접하기 때문에 뭔가를 간과하고 재앙으로 이어지기 쉽다고 생각합니다.
또한 top, ps를 사용하거나 sysInfo를 호출하는 대신 /proc/ 파일을 직접 쿼리하는 것이 더 낫습니까? 아니면 이 접근 방식은 권장되지 않습니까?
답변1
이는 스크립트를 사용하지 않고도 watch를 사용하여 쉽게 수행할 수도 있습니다.
watch -t -n 10 "(date '+TIME:%H:%M:%S' ; ps aux | grep "pattern" | wc -l) | tee -a 로그 파일"
그러나 이 답변에서 언급한 대로 "ps -auxww | grep 'pattern' | wc -l" 대신 "ps -up PID"(특정 프로세스 ID에 대한 리소스 사용량을 보려면)를 사용합니다.
watch 명령 새로 고침을 더 빠르게 또는 느리게 만들기 위해 "watch -t -n XX" 다음에 XX 번호를 변경할 수도 있습니다(watch -n0,5 = 0.5초마다 새로 고침, watch -n10 = 10초마다 새로 고침).
답변2
물론 관심 있는 데이터와 이를 원하는 이유에 따라 달라집니다(제한된 수의 값에 비해 후배 디버깅/튜닝 목적에 대한 대략적인 결과를 얻기 위해 동시에 많은 것을 관찰하는 쉬운 방법이 있습니다). ) 정확한 벤치마킹.)
top, htop...과 같은 일반적인 유틸리티는 이전 요구 사항에 적합합니다.
그러나 미리 만들어진 범용 도구를 실행하면 시스템이 어느 정도 방해를 받게 됩니다. 이는 애플리케이션이 실행되고 있지 않으면 실제 결과가 달라질 수 있음을 의미합니다.
예를 들어, 다음을 사용하는 경우맨 위실행 중인 스레드가 있는 CPU를 관찰하면 자주 변경되는 것을 알 수 있습니다. top이 실행되고 있지 않으면 발생하는 숫자가 훨씬 적습니다.
후자의 필요에 대해서는 확실히 그것을 원하지 않습니다. 이러한 목적(정확한 벤치마킹)을 위해 다음과 같은 아이디어를 얻을 수 있습니다("/proc/를 직접 쿼리해 보세요.”)는 정말로 돈으로 살 수 있는 최고의 물건입니다.
A/ man proc
관심 있는 정보가 포함된 /proc 디렉토리 트리에서 파일을 찾으려면(적을수록 좋습니다)
B/ 간단한 쉘 스크립트가 있습니다:
- 이 파일을 /tmp 파일에 추가하세요(grep하지 마세요).
- 잠시 자세요 (높을수록 좋습니다)
- 파일을 다시 캡처하고 결과를 /tmp 파일에 추가합니다.
C/는 일반적인 워크로드를 시작한 다음 모든 콘솔에서 스크립트를 시작합니다.
D/ /tmp 파일을 스프레드시트로 가져오고 미적분학을 만져보세요.
물론, 수십 개의 CPU만 있고 관리를 위해 별도의 CPU0이 있는 경우 가장 좋은 방법은 콘솔을 해당 CPU에 고정하는 것입니다.