일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- SELinux비활성화
- Mac
- 이진탐색
- 프로그래머스
- PrivateSubnet
- terraform
- lsof
- JWT
- terraform 기본개념
- Timezon설정
- Jenkinspipeline
- haproxy
- s3
- heapq
- Docker
- 인텔리제이
- terraform main commands
- terraform variable
- algorithm
- linuxr계정설정
- terraform 설치
- Python
- ec2
- java
- binarysearch
- Process monitoring
- Jenkins
- session manager
- endpoint
- terraform backend
- Today
- Total
MONG 기술블로그
프로세스 모니터링 ( ps , top, lsof ) 본문
오늘은 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
'AWS > EC2' 카테고리의 다른 글
AWS EC2 콘솔에서 SSH 접속하기 (System Manager) (0) | 2022.02.13 |
---|---|
Linux 기본 세팅 ( 계정 , TimeZone , NTP , Selinux ) (0) | 2022.02.12 |