"watch"를 사용하여 값의 차이를 감지하고 파일에 쓰기

"watch"를 사용하여 값의 차이를 감지하고 파일에 쓰기

다음 명령을 사용하여 서버에서 간헐적으로 %CPU 스파이크의 원인을 찾으려고 합니다. watch -n .5 "ps aux | sort -rk 3,3 | head -n 2" 여기서 %가 가장 높은 프로세스가 표시됩니다. 0.5초마다 CPU.

그러나 잡기가 어렵기 때문에(이벤트가 무작위이고 얼마나 오래 지속되는지 알 수 없음) 다음을 수행하고 싶습니다. 1. 간격을 줄이고(이벤트를 잡을 확률을 높이기 위해) 출력을 다음 위치에 씁니다. 파일 2. 어쨌든 상위 프로세스는 일반적으로 일정하기 때문에 이렇게 큰 파일이 생성되는 것을 피하기 위해 두 개의 후속 출력 사이에 값 차이가 있을 때만(예: CPU 스파이크가 발생할 때) 작성하고 싶습니다.

티아!

답변1

시계는 잊어버리세요. 최소한 이론적으로는 이렇게 해야 합니다.

while true; do
  # I cut the header first with tail
  cat file <(ps aux | tail -n +2 | sort -rk 3,3 | head -n 2) | sort | uniq | sponge file
  # A certain amount of delay
  sleep 0.1
done

유일한 문제는 각 프로세스의 CPU 사용량이 시간에 따라 달라지고 특히 CPU 사용량을 구하는 것이므로 그 효과가 uniq매우 제한적이고 여전히 많은 양의 데이터가 생성된다는 점입니다. 를 사용하면 cut중요하지 않은 변수를 억제하여 변수의 변화로 인해 생성되는 데이터 포인트 수가 증가하지 않도록 할 수 있습니다.

관련 정보