bash script2021. 8. 10. 18:01

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/523010

 

top 명령과 awk 명령을 조합해서 어느 프로세스가 자원을 많이 점유하고 있는지 확인해 볼 수 있다. 아무런 옵션 지정 없이 top 명령을 실행하면 현재 프로세스 상황을 실시간으로 보여주는데, 스크립트에서 다른 명령들과 조합하기 위해서는 실행 시점에서 상황을 한번만 표시하도록 아래와 같이 옵션을 주자.

# 결과를 한번만 표시하고 종료
top -bn 1

만약 CPU 점유율이 90% 이상인 프로세스만 골라내고 싶다면 아래와 같이 awk 명령을 조합할 수 있다. 아래의 예시를 보자. awk 명령으로 CPU 점유율과 프로세스 이름만 골라낸 후, grep 명령의 정규표현(regular expression)을 이용해서 90~99 또는 100이 포함된 부분만 추려냈다.

# CPU 점유율 90% 이상인 프로세스 출력
# top 출력에서 CPU 점유율은 9번째 항목이고 프로세스 이름은 12번째 항목에 있음
top -bn 1 | awk '{ print $9 " " $12 }' | grep "^9[0-9]\|^100"

grep 명령을 이용한 다중 문자열 검색은 이전 게시물을 참조하자. 여기로

메모리 점유율이 높은 프로세스를 찾는 것도 같은 방식으로 하면 되겠다. 아래의 예시를 보자.

# 메모리 점유율 50% 이상인 프로세스 출력
# top 출력에서 메모리 점유율은 10번째 항목에 있음
top -bn 1 | awk '{ print $10 " " $12 }' | grep "^[5-9][0-9]\|^100"

CPU 또는 메모리를 유난히 많이 점유하고 있는 프로세스가 있는지 확인을 하거나, 특정 작업을 실행하기 전에 자원이 충분한지 점검해야 할 경우에 스크립트 형태로 작성해서 유용하게 쓸 수 있다.

예를 들어 전체 CPU 코어의 수와 점유율 90% 이상인 프로세스의 수가 같다면 모든 코어에 상당한 부하가 걸려 있는 셈이므로 경고문을 출력해 준다거나 할 수 있을 것이다. CPU 코어 개수 파악은 nproc 명령을 이용하면 된다. 아래의 예시를 보자.

# nproc 명령으로 전체 CPU 코어 개수 파악
total_cores=`nproc`
# CPU 점유 90%  이상인 프로세스 개수 파악
busy_cores=`top -bn 1 | awk '{ print $9 }' | grep "^9[0-9]\|^100" | wc -l`
# 양쪽 개수가 같을 경우 경고문 출력
if [ $busy_cores -eq $total_cores ]
then echo "모든 CPU 코어가 90% 이상 점유되어 있습니다!"
fi

 

728x90
Posted by 반달가면