MONG 기술블로그

프로세스 모니터링 ( ps , top, lsof ) 본문

AWS/EC2

프로세스 모니터링 ( ps , top, lsof )

MJHmong 2022. 3. 27. 00:25

오늘은 Linux 프로세스 모니터링 할때 많이 사용하는 도구에 알아보고 간단하게 사용법을 익혀보자.

 

1. ps ( Process Status )

2. top ( Table Of Processes )

3. lsof ( LiSt Open Files )

 

 

 PS ( Process Status )

ps 명령어는 현재 실행중인 프로세스 목록과 상태를 확인할 때 사용한다.

 

사용방법 : ps [option]

 

예를들어 아래와 같은 옵션을 사용하여 다양하게 사용할 수 있다.

Command Option Example description
ps -ef ps -ef 현재 실행중인 프로세스 전체 확인
ps -elf ps -elf 현재 실행중인 프로세스 전체 확인 + `-l`  ( long format으로 짤림 방지 )
ps aux ps aux 현재 실행중인 프로세스와 사용율 ( %CPU %MEM VSZ RSS STAT .. ) 함께 확인
ps auxf ps auxf ps aux에 `f` 옵션을 줘서 실행중인 프로세스를 트리 구조로 확인할 수 있음 ( f )
ps auxfww ps auxfww ps auxf에 `ww`옵션을 통해 실행 옵션까지 모두 확인 할 수 있음
ps -eLF ps -eLF 쓰레드 정보까지 함께 확인해야할 때 사용

 

이중 내가 가장 많이 사용하는 옵션은 -elf , auxfww , -eLF이다.

또한 첫 라인에 속하는 헤더정보를 같이 보기 위해서는 아래와 같이 사용한다.

# ps -elf 헤더 정보 함께 보기
ps -elf | grep -v grep | egrep "TIME CMD|{process_name}"

# ps auxfww 헤더 정보 함께 보기
ps auxfww | grep -v grep | egrep "COMMAND|{process_name}"

 

명령어 실행 결과 예시 ( ps -elf , auxfww, -eLF )

 

또한 -eLF 쓰레드정보까지 함께 확인이 가능하며, 다음과 같은 결과를 볼 수 있다.

여기에서 생소한 LWP는 Low Weight Process ( Thread )를 의미하여 NLWP는 Number of LWP를(LWP의 개수) 의마한다. 

 

 

TOP ( Table Of Processes )

시스템의 프로세스에 의한 리소스 상태를 확인할 때 사용한다. ( CPU , Memory ... )

취합 정보가 아닌 순간의 정보만을 확인할 때는 -b 옵션을 사용하자 ( batch mode )

여기에 반복 횟수까지 추가하려면 -n 옵션을 추가하여 사용할 수 있다.

 

예시 ( 순간 정보 + 연속 2회 출력 ) : top -b -n 2

 

(내가)주로 사용하는 옵션/단축키는 아래 표에 모두 작성해놓았으니 필요하신 분은 참고.

option description
shift + p CPU 사용률 내림차순 정렬
shift + m Memory 사용률 내림차순 정렬 
shift + t 프로세스 사용 시간 내림차순 정렬
1 cpu 합산이 아닌 각 cpu별 사용량을 보여줌
f 컬럼정보 추가 / 삭제 가능
k 프로세스ID기반으로 kill 명령어 수행 가능 

 

이중에 생소한 부분에 대해 몇가지 이미지로 살펴보자.

 

- cpu 각각 사용율을 확인  => '1' 

 

- 표시할 컬럼 정보 선택 => `f`

위와같이 추가로 컬럼 정보를 추가하고싶다면 f 를 눌러서 추가로 선택하자. ( space )

 

마지막으로 -H 옵션을 통해 ps에서 -ELF를 사용한것과 동일하게 쓰레드 정보까지 확인이 가능하다.

만약 특정 쓰레드가 문제인지 확인이 필요할 때는 top -H 명령어를 통해 확인해보자.

 

[ 생소할 수 있는 컬럼에 대한 설명 ]
VIRT(Virtual Image (kb)) : 프로세스가 사용하고 있는 가상 메모리 사용량
RES(Resident Size (kb)) : 프로세스가 사용하고 있는 페이지의 크기
SHR(Shared Mem Size (kb))  : 프로세스가 사용하고 있는 공유 메모리 크기
S(Process Status) : 프로세스 상태
- R(Running)
- S(Sleeping)
- T(stopped Trace)
- W(Swapped out)
- Z(Zombie)
TIME+(CPU Time : 프로세스가 CPU 를 사용한 시간
COMMAND : 프로세세를 실행한 명령

 

 

■ LSOF ( List Open Files )

시스템에서 열린 파일 목록을 알려주고, 사용하는 프로세스, 디바이스 정보, 파일의 종류등 상세한 정보를 출력한다.
리눅스는  일반 파일, 디렉토리 , 네트워크 소켓, 라이브러리, 심볼릭 링크 등도 모두 파일로 처리되므로 lsof를 사용하면 이에 대한 상세한 정보를 얻을 수 있다.

 

우선 lsof 명령어를 옵션 없이 사용하고 각 컬럼에 대해 간단히 알아보자.

 

lsof 모든 열린 파일 정보 출력

1. FD: File Descriptor, 파일의 종류.
 - cwd: current working directory
 - rtd: root directory
 - mem : memory-mapped file
 - txt: program text (code and data)

2. TYPE: 파일 종류
 - DIR: 디렉터리
 - CHR: character special file
 - REG: regular file
 - unix: 유닉스 도메인 소켓 (MySQL 등이 사용하는 소켓으로 로컬 프로세스에서만 사용 가능하며 TCP/UDP 보다 속도가 매우 빠름)

3. DEVICE : 장치 번호
4. SIZE/OFF: 파일의 크기나 오프셋
5. NODE : 노드 번호

 

자주 사용하는 옵션 설명

Option Example Description
None lsof /var/log/httpd/error_log 특정 파일을 사용하는 프로세스 목록 확인
-u {username} lsof -u apache 특정 유저가 사용하는 프로세스 목록 확인
+D {DirPath} lsof +D /var/log/httpd 특정 디렉토리를 사용하는 프로세스 목록 확인
-i {protocol}:{port} lsof -i tcp:80 특정 프로토콜:포트를 사용하는 프로세스 확인
-i {protocol}:{start_port-end_port} lsof -i tcp:80-3000 프로토콜:포트1-포트2 범위 확인

 

예를들어 tcp80 ~ 3000까지 사용하는 프로세스 목록을 확인하고자할 때 다음과 같이 사용할 수 있다.

lsof -i tcp:80-3000

Comments