bash script (backup)2021. 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

 

Posted by 반달가면

댓글을 달아 주세요

리눅스 (backup)2021. 1. 6. 10:58

 

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

 

리눅스에서 df 명령으로 디스크의 빈 공간을 확인해 보면 /dev/shm 디렉토리가 있는데, 파일시스템 형식은 tmpfs이고 크기는 램(RAM) 용량의 반 정도 될 것이다.
 
이 디렉토리는 공유 메모리(shared memory)라고 해서 일종의 램디스크인데, RAM 용량의 반을 당장에 실제로 점유하고 있는 것은 아니고 사용하는 만큼만 용량을 소모한다. 그러므로 RAM 용량이 반이나 날아갔다고 오해하면서 걱정할 필요는 없다.

자주 읽기/쓰기를 하는 임시 파일을 사용해야 할 경우에 RAM 용량이 충분하다면 이 디렉토리가 상당히 요긴하다.

다만, 한가지 주의할 점은 /dev/shm의 접근 권한이다. 모든 사용자가 읽고 쓸 수 있으므로, 만약 이 디렉토리를 사용하고 싶다면 하위에 자신만 접근할 수 있는 권한으로 디렉토리를 하나 만들어서 사용하자.

cd /dev/shm
mkdir my_tmp_dir
chmod 700 my_tmp_dir  (자신만 접근할 수 있도록 권한 설정)

참고로, 만약 다른 프로그램들이 RAM을 이미 많이 점유하고 있는 상태에서 /dev/shm 디렉토리를 사용하다가 사용량이 RAM 용량을 초과하게 되면 그 때는 스왑(swap) 영역으로 넘어간다.

 

Posted by 반달가면

댓글을 달아 주세요