[Study39]Linux에서의 프로세스 정보 및 관리 이해 - 프로세스 모니터링
프로세스 모니터링
프로세스 모니터링은 컴퓨터 시스템에서 실행되는 프로세스를 지속적으로 검사하고, 이상 현상이나 장애 발생 시에 이를 신속하게 처리하며, 시스템의 안정성을 유지하는 것입니다. 프로세스 모니터링은 이상 현상이나 장애 발생 시 신속한 대처가 필요한 서버나 클라우드 시스템에서 매우 중요한 역할을 합니다. 이를 통해 시스템의 안정성을 유지함으로써, 사용자들은 더욱 안정적이고 원활한 서비스를 이용할 수 있습니다.
top 명령 (ps와 같은 명령어 - 차이점? top은 실시간 모니터링)
[참고] 서버에 접속하여 시스템 모니터링
[참고] 서버에 접속하여 시스템 모니터링을 수행할 수 있습니다. 이를 위해서는 터미널에서 몇 가지 명령어를 실행해야 합니다.
[TERM1] (TUI) # top
첫 번째로, top 명령어를 실행하면 시스템의 현재 상태를 모니터링할 수 있습니다. 이 명령어는 시스템의 프로세스들을 정렬하여 CPU 사용률, 메모리 사용률 등을 볼 수 있어 시스템에 대한 전반적인 정보를 파악하는 데 유용합니다.
[TERM2] (TUI) # tail -f /var/log/messages
두 번째로, tail 명령어를 사용하면 로그 파일을 모니터링할 수 있습니다. 위의 예시에서는 /var/log/messages 파일을 모니터링하지만, 다른 로그 파일도 모니터링할 수 있습니다. 이를 통해 시스템의 문제점을 파악하고 대처할 수 있습니다.
위의 명령어를 사용하여 시스템 모니터링을 수행하면 시스템에 대한 이해도를 높일 수 있습니다. 이를 통해 시스템의 안정성을 높이고 문제를 예방할 수 있습니다.
프로세스 모니터링은 시스템의 성능을 확인하고, 문제점을 파악하는 데 중요한 역할을 합니다. top 명령어는 이러한 프로세스 모니터링을 수행하는 일종의 명령어로, 실시간으로 프로세스의 상태나 CPU, 메모리, 접속한 사용자의 수 등을 알 수 있게 됩니다. 이를 통해 시스템의 성능을 확인하려 할 때 많이 사용되며, top 명령어를 사용하여 CPU 사용량별로 정렬할 수 있습니다.
기본설정은 명령어 수행 시간 간격(time interval)이 3~4초로 설정되어 있으며, top 명령어를 사용하여 프로세스의 상태뿐만 아니라, 시스템 자원(CPU, 메모리 등) 사용량도 확인할 수 있습니다. 이를 통해 시스템의 성능을 평가하고, 문제를 해결할 수 있습니다. 또한, top은 ps와는 달리 실시간으로 모니터링이 가능하여, 시스템의 상태 변화를 실시간으로 확인하고 대응할 수 있습니다.
시스템 모니터링을 위해서는 tail 명령어를 사용하여 로그 파일을 실시간으로 모니터링할 수 있습니다. 이를 통해 시스템 로그를 확인하고, 문제점을 파악할 수 있습니다. 따라서, 시스템 모니터링에 대한 이해와 top 명령어를 사용하는 방법에 대한 이해가 중요합니다.
프로세스 모니터링은 시스템의 동작 상황을 파악하기 위해 중요한 요소입니다. top 명령어를 사용하면, 다양한 프로세스 정보를 실시간으로 모니터링할 수 있습니다.
- top 명령어를 사용하여, 시스템의 프로세스 정보를 실시간으로 모니터링할 수 있습니다.
- top -u 명령어를 사용하면, 특정 사용자의 프로세스 정보를 모니터링할 수 있습니다.
- top -p 명령어를 사용하면, 특정 번호의 프로세스 정보를 모니터링할 수 있습니다.
- top –d 명령어를 사용하여 새로고침의 시간을 변경하면, 자주 업데이트되는 정보에 대한 빠른 접근이 가능해져 시스템의 동작 상황을 더욱 빠르게 파악할 수 있습니다.
따라서, top 명령어를 적극적으로 활용하여 시스템의 프로세스 정보를 모니터링하면, 시스템의 동작 상황에 대한 빠른 파악이 가능해지며 이를 통해 시스템에 대한 보다 높은 수준의 관리가 가능해집니다.
top 명령어 기본 사용방법 실습
top 명령어는 프로세스 모니터링에 사용되며, CPU 사용률, 메모리 사용률 등 프로세스에 대한 정보를 표시합니다.
# top -h (# top --help)
top: procps version 3.2.7
usage: top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...]
top 외에도 ps, pstree, pwdx, nice, renice 등 프로세스 모니터링에 유용한 명령어가 있습니다. 이러한 명령어들은 프로세스를 모니터링하고 우선순위를 지정하여 시스템 자원을 효율적으로 관리할 수 있도록 도와줍니다.
예를 들어, pwdx 명령어를 사용하여 프로세스의 현재 작업 디렉토리를 얻을 수 있으며, nice를 사용하여 프로세스의 우선순위를 조정할 수 있습니다. 이미 실행 중인 프로세스의 우선순위를 조정하려면 renice 명령어를 사용할 수 있습니다.
시스템 자원을 효율적으로 관리하려면 프로세스 모니터링 명령어를 사용하여 시스템 자원 사용량을 추적하고 필요에 따라 최적화할 수 있습니다.
# top
top - 17:46:37 up 2:25, 4 users, load average: 0.03, 0.03, 0.00
Tasks: 136 total, 1 running, 134 sleeping, 0 stopped, 1 zombie
Cpu(s): 2.0%us, 1.7%sy, 0.0%ni, 96.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1035096k total, 718752k used, 316344k free, 68376k buffers
Swap: 522104k total, 0k used, 522104k free, 492140k cached
이 부분은 시스템의 성능에 대한 정보를 보여주는 시스템 상태 보고서입니다. 'load average'는 시스템이 많은 사용량을 처리하고 있지 않다는 것을 나타냅니다. 'Tasks'는 현재 실행 중인 태스크 수를 보여주며, 'Cpu(s)'는 CPU 사용률을 보여줍니다. 'Mem'은 메모리 사용량에 대한 정보를 제공하며, 'Swap'은 스왑 영역의 사용에 대한 정보를 제공합니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4203 root 16 0 84828 16m 11m S 2.7 1.6 0:09.65 gnome-terminal
3624 root 15 0 35972 10m 6360 S 0.7 1.1 0:16.60 Xorg
3813 root 15 0 42812 10m 8520 S 0.2 1.1 0:01.10 vmware-user
1 root 18 0 2072 616 532 S 0.0 0.1 0:01.26 init
이 부분은 시스템에서 실행 중인 프로세스에 대한 정보를 제공합니다. 각 프로세스는 PID로 식별됩니다. 프로세스의 사용자, 우선순위, CPU 및 메모리 사용량, 실행 중인 명령 등에 대한 추가 정보도 제공됩니다. 이 부분에서는 gnome-terminal이 가장 많은 CPU 시간을 사용하고 있음을 알 수 있습니다.
Press 'h' or '?' for help with Windows,
any other key to continue
PID to kill: <firedox의 PID번호 입력>
Kill PID 23846 with signal [15]: <**9**>
이 부분은 시스템 상태 보고서 유틸리티에서 지원하는 상호작용 명령에 대한 정보를 제공합니다. 이 명령을 사용하면 보고서의 표시를 조작하거나 프로세스를 종료하거나 표시 정보의 정렬 순서를 변경할 수 있습니다. 이 경우 사용자는 프로세스를 종료하고 PID 번호로 프로세스를 식별합니다. 프로세스는 신호 9와 함께 종료됩니다.
a: PID = Process Id s: DATA = Data+Stack size (kb) not those in column display. Thus, t: SHR = Shared Mem size (kb) the TTY & WCHAN fields will violate u: nFLT = Page Fault count strict ASCII collating sequence. v: nDRT = Dirty Pages count (shame on you if WCHAN is chosen)
f: GROUP = Group Name x: COMMAND = Command name/line
g: TTY = Controlling Tty y: WCHAN = Sleeping in Function
h: PR = Priority z: Flags = Task Flags <sched.h>
i: NI = Nice value
j: P = Last used cpu (SMP)
마지막으로 이 부분은 표시 정보의 정렬 순서를 변경할 수 있는 사용 가능한 정렬 필드에 대한 정보를 제공합니다. 사용자는 알맞은 문자를 선택하여 정렬 필드를 변경할 수 있습니다.
top 명령 (ps와 같은 명령어 - 차이점? top은 실시간 모니터링)
[필드 해석]
옵션 | 설명 |
a | 프로세스 ID |
b | 부모 프로세스 PID |
c | 실제 사용자 이름 |
d | 사용자 ID |
e | 사용자 이름 |
f | 그룹 이름 |
g | 제어 터미널 이름 |
h | 우선 순위 |
i | Nice 값 |
j | 마지막으로 사용된 CPU (SMP) |
k | CPU 사용량 |
l | CPU 시간 |
m | CPU 시간, 1/100 초 |
n | 메모리 사용량 (RES) |
o | 가상 메모리 크기 (KB) |
p | 스왑 크기 (KB) |
q | 물리적 메모리 크기 (KB) |
r | 코드 크기 (KB) |
s | 데이터+스택 크기 (KB) |
t | 공유 메모리 크기 (KB) |
u | 페이지 폴트 수 |
v | 변경된 페이지 수 |
w | 프로세스 상태 |
x | 명령줄 또는 프로그램 이름 |
y | 함수에서 대기 중 |
z | 프로세스 플래그 |
위의 필드들은 top 명령어를 사용할 때 출력되는 정보들입니다. 각 필드들은 다음과 같은 의미를 가지고 있습니다.
항목 | 설명 |
a | 프로세스의 고유한 ID |
b | 프로세스의 부모 ID |
c | 프로세스를 실행한 실제 사용자 이름 |
d | 프로세스를 실행한 사용자 ID |
e | 프로세스를 실행한 사용자 이름 |
f | 프로세스를 실행한 사용자가 속한 그룹 이름 |
g | 프로세스가 실행되고 있는 제어 터미널 이름 |
h | 프로세스의 우선 순위 |
i | 프로세스의 Nice 값 |
j | 마지막으로 사용된 CPU 번호 (SMP) |
k | 프로세스가 사용하는 CPU 사용률 |
l | 프로세스가 시작된 이후 사용한 총 CPU 시간 |
m | 프로세스가 시작된 이후 사용한 CPU 시간, 1/100 초 |
n | 프로세스가 사용하는 메모리 사용률 |
o | 프로세스의 가상 메모리 크기 |
p | 프로세스가 스왑한 메모리 크기 |
q | 프로세스가 사용하는 물리적 메모리 크기 |
r | 프로세스에 할당된 코드 크기 |
s | 프로세스가 사용하는 데이터 + 스택 크기 |
t | 프로세스가 사용하는 공유 메모리 크기 |
u | 프로세스의 페이지 폴트 수 |
v | 프로세스에서 변경된 페이지 수 |
w | 프로세스의 상태 |
x | 프로세스를 실행한 명령줄 또는 프로그램 이름 |
y | 프로세스가 현재 대기 중인 함수의 이름 또는 주소 |
z | 프로세스의 플래그 |
위의 필드는 top 명령어를 사용하여 시스템 모니터링을 할 때, 프로세스의 상태와 정보를 파악하는 데에 유용합니다. 필드 해석을 통해 top 명령어가 출력하는 정보들을 이해할 수 있습니다.
사용자 별로 모니터링
사용자 별로 모니터링하는 방법을 안내합니다. 모니터링은 사용자마다 다른 명령어를 사용하므로, 각각의 사용자에 대한 명령어 형식을 설명합니다.
# top -u root
# top -u oracle
# top -u wasuser
root 사용자 윈도우에서는 다음 명령어를 실행합니다.
# top -u fedora
위 명령어는 fedora 사용자의 프로세스를 모니터링합니다.
다음으로, fedora 사용자 윈도우에서는 다음 명령어를 실행하여 로그인합니다.
# telnet localhost
fedora 사용자로 로그인
$ id
$ bash -----> 관리자 윈도우 확인
$ ksh -----> 관리자 윈도우 확인
$ vi /etc/passwd
$ exit
$ exit
$ exit
위 명령어는 사용자가 로그인한 후, 관리자 윈도우에 대한 권한을 확인하며, /etc/passwd 파일을 확인합니다.
이제, 사용자 모니터링을 위한 모든 과정을 확인할 수 있습니다. 모니터링은 각 사용자에 따라 다르므로, 해당 사용자의 명령어를 참고하여 진행하시기 바랍니다.
몇개의 프로세스만 모니터링
모니터링할 프로세스의 PID 번호 확인하기
프로세스를 모니터링하기 위해서는 해당 프로세스의 PID 번호를 알아내야 합니다. 이를 확인하기 위해 ps 명령어나 pstree 명령어를 사용할 수 있습니다.
예를 들어, ps 명령어를 사용하여 현재 실행 중인 프로세스 리스트를 확인할 수 있습니다.
# ps
PID TTY TIME CMD
4012 pts/0 00:00:00 bash
5564 pts/0 00:00:00 ps
위의 예시에서 PID 번호는 첫 번째 열에서 확인할 수 있습니다.
top 명령어를 사용하여 프로세스 모니터링하기
PID 번호를 확인한 후에는 top 명령어를 사용하여 해당 프로세스의 정보를 출력합니다.
예를 들어, top 명령어를 사용하여 PID 번호가 1인 프로세스를 모니터링하려면 아래와 같이 입력합니다.
# top -p 1
위의 명령어를 실행하면 해당 프로세스의 정보가 출력됩니다. 출력된 정보를 통해 해당 프로세스의 CPU, 메모리 등의 사용량을 확인할 수 있습니다.
ps 명령어를 사용하여 프로세스 모니터링하기
top 명령어 외에도 ps 명령어를 사용하여 프로세스를 모니터링할 수 있습니다. 예를 들어, ps 명령어를 사용하여 PID 번호가 2371인 프로세스의 정보를 출력하려면 아래와 같이 입력합니다.
# ps -p 2371
위의 명령어를 실행하면 해당 프로세스의 정보가 출력됩니다. 출력된 정보를 통해 해당 프로세스의 CPU, 메모리 등의 사용량을 확인할 수 있습니다.
pstree 명령어를 사용하여 프로세스 모니터링하기
pstree 명령어를 사용하면 프로세스간의 부모 자식 관계를 트리 형태로 보여줍니다. 이를 통해 프로세스 간의 관계를 파악할 수 있습니다.
예를 들어, pstree 명령어를 사용하여 PID 번호가 8040인 프로세스의 정보를 출력하려면 아래와 같이 입력합니다.
# pstree 8040
위의 명령어를 실행하면 해당 프로세스의 정보가 출력됩니다. 출력된 정보를 통해 해당 프로세스와 그 자식 프로세스들 간의 관계를 파악할 수 있습니다.
pwdx 명령어를 사용하여 대상 프로세스의 현재 작업 디렉토리 확인하기
pwdx 명령어를 사용하면 대상 프로세스의 현재 작업 디렉토리를 확인할 수 있습니다. 이를 통해 해당 프로세스가 어떤 디렉토리에서 작업하고 있는지 파악할 수 있습니다.
예를 들어, pwdx 명령어를 사용하여 PID 번호가 21716인 프로세스의 현재 작업 디렉토리를 확인하려면 아래와 같이 입력합니다.
# pwdx 21716
위의 명령어를 실행하면 해당 프로세스의 현재 작업 디렉토리가 출력됩니다.
nice 명령어와 renice 명령어를 사용하여 프로세스의 우선순위 조정하기
프로세스를 실행하는데 있어서 프로세스에게 우선권을 부여할 수 있는데, 이때 nice 명령어와 renice 명령어를 사용하여 프로세스의 우선순위를 조정할 수 있습니다.
nice 명령어는 프로그램을 실행할 때 프로세스의 우선순위를 설정할 수 있는 명령어입니다. renice 명령어는 실행중인 프로그램의 우선순위를 조정할 수 있는 명령어입니다.
예를 들어, nice 명령어를 사용하여 PID 번호가 124545인 프로세스의 우선순위를 10으로 설정하려면 아래와 같이 입력합니다.
# nice -n 10 PID
위의 명령어를 실행하면 해당 프로세스의 우선순위가 조정됩니다. renice 명령어를 사용하여 실행중인 프로그램의 우선순위를 조정할 수도 있습니다.
시스템 모니터링(CPU/MEM)
시스템의 최적 성능을 보장하기 위해서는 CPU 및 메모리 사용량을 모니터링하는 것이 중요합니다. 시스템의 CPU 및 메모리 사용량을 모니터링함으로써 잠재적인 문제점을 조기에 파악하고 필요한 조치를 취할 수 있습니다.
시스템 모니터링 도구를 사용하여 CPU 및 메모리 사용량을 모니터링하는 방법 중 하나입니다. 이러한 도구는 시스템의 CPU 및 메모리 사용을 실시간으로 제공하여 사용량의 급증이나 감소를 파악하여 문제점을 파악할 수 있습니다.
또한 CPU 및 메모리 사용량에 대한 임계값을 설정하는 것도 중요합니다. 임계값을 설정함으로써 시스템 모니터링 도구를 구성하여 CPU 또는 메모리 사용량이 특정 수준을 초과하면 알림을 받을 수 있습니다. 이는 성능 문제를 예방하기 위해 예방 조치를 취하는 데 도움이 됩니다.
또한 시스템 모니터링 도구에서 수집한 데이터를 정기적으로 검토하고 분석하는 것이 중요합니다. 이를 통해 CPU 및 메모리 사용량의 추세나 패턴을 파악하여 시스템의 대규모 문제를 파악할 수 있습니다.
따라서 시스템의 최적 성능과 안정성을 보장하기 위해서는 견고한 시스템 모니터링 전략이 필요합니다. 이에는 시스템 모니터링 도구의 사용, CPU 및 메모리 사용량에 대한 임계값 설정, 수집된 데이터를 정기적으로 검토하고 분석하는 것이 포함됩니다. 이러한 최선의 방법을 따르면 다운 타임을 최소화하고 시스템 성능을 개선하여 시스템 전반적인 성공을 보장할 수 있습니다.
[실습준비]
- /root/bin 디렉토리 생성 및 이동mkdir 명령어를 사용하여 /root/bin 디렉토리를 생성하고, cd 명령어를 사용하여 생성한 디렉토리로 이동합니다.
- # mkdir –p /root/bin # cd /root/bin
- EPEL 패키지 설치yum 명령어를 사용하여 EPEL 패키지를 설치합니다.
- # yum -y install epel*
- YUM 캐시 삭제yum 명령어를 사용하여 YUM 캐시를 삭제합니다.
- # yum clean all
- YUM 레파지토리 목록 확인yum 명령어를 사용하여 YUM 레파지토리 목록을 확인합니다.
- # yum repolist
- Cockpit 패키지 확인yum 명령어를 사용하여 Cockpit 패키지 목록을 확인합니다.
- # yum list | grep cockpit
- Cockpit 패키지 설치yum 명령어를 사용하여 Cockpit 패키지를 설치합니다.
- # yum -y install cockpit*
- Cockpit 서비스 시작systemctl 명령어를 사용하여 Cockpit 서비스를 시작합니다.
- # systemctl start cockpit
- Cockpit 서비스 자동 시작 설정systemctl 명령어를 사용하여 Cockpit 서비스가 부팅시 자동으로 시작되도록 설정합니다.
- # systemctl enable cockpit
- 방화벽 설정firewall-cmd 명령어를 사용하여 방화벽 설정을 추가하고, 변경사항을 적용합니다.
- # firewall-cmd --permanent --zone=public --add-service=cockpit # firewall-cmd --reload
위의 코드를 차례대로 실행하면, 실습을 위한 환경이 구성됩니다.
CPU 부하량 테스트
아래의 코드는 3개의 스크립트를 사용하여 CPU 부하량을 테스트하는 방법을 보여줍니다. 이는 서버나 시스템이 고부하 상황에서 어떻게 동작하는지를 평가하는 데 유용합니다.
# cd /root/bin
# cat cpu.sh
#!/bin/bash
echo "+------------------------------------------+"
echo "| Control-C will terminate cpu.sh process. |"
echo "+------------------------------------------+"
START=0
END=1000000000000000000
while [ $START -le $END ]
do
START=`expr $START + 1`done
첫 번째 스크립트인 cpu.sh는 변수의 값을 0에서 매우 높은 값까지 증가시키면서 CPU 부하 테스트를 수행합니다. 이 스크립트는 ./cpu.sh 명령을 사용하여 실행됩니다.
# cat cpu2.sh
#!/bin/bash
echo "+------------------------------------------+"
echo "| Control-C will terminate cpu2.sh process.|"
echo "+------------------------------------------+"
while true
do
a=1
done
두 번째 스크립트인 cpu2.sh는 변수를 증가시키는 무한 루프를 실행하여 CPU 부하 테스트를 수행합니다. 이 스크립트는 ./cpu2.sh 명령을 사용하여 실행됩니다.
# cat cpu3.sh
#!/bin/bash
echo "+------------------------------------------+"
echo "| Control-C will terminate cpu3.sh process.|"
echo "+------------------------------------------+"
trap 'killall cpu.sh ; exit 1' 2 3
./cpu.sh &
sleep 10
./cpu.sh &
sleep 10
./cpu.sh &
sleep 10
./cpu.sh &
sleep 3600
trap 2 3
세 번째 스크립트인 cpu3.sh는 일정 시간 동안 cpu.sh의 여러 인스턴스를 실행하기 위해 사용됩니다. 이 스크립트는 cpu.sh의 실행을 여러 번 시작하고 중지하여 일정한 시간 간격을 두고 시스템에 더 현실적인 부하를 시뮬레이션합니다. 이 스크립트는 ./cpu3.sh 명령을 사용하여 실행됩니다.
이러한 스크립트는 고부하 상황에서 시스템의 성능을 테스트하는 데 유용하며, 다양한 테스트 시나리오에 맞게 사용자가 수정할 수 있습니다.
메모리 부하량 테스트
메모리 부하량 테스트는 시스템의 메모리 사용량을 측정하는 데 사용되며, 시스템이 얼마나 많은 메모리를 사용할 수 있는지 확인하는 데 도움이 됩니다. 이를 위해서는 다음과 같은 단계를 거칩니다.
메모리 부하량 테스트 코드 작성
먼저, 메모리 부하량 테스트를 위한 코드를 작성해야 합니다. 아래의 코드는 메모리를 동적으로 할당하는 코드로, 무한 루프를 돌면서 메모리를 할당합니다.
# cat mem.c
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *m;
printf("+------------------------------------------+\\\\n");
printf("| Control-C will terminate mem process. |\\\\n");
printf("+------------------------------------------+\\\\n");
while (1)
m=malloc(1);
}
메모리 부하량 테스트 코드 컴파일
위의 코드를 컴파일하여 실행 가능한 프로그램을 만들어야 합니다. 아래의 명령어를 사용하여 컴파일할 수 있습니다.
# gcc -o mem mem.c (# yum -y install gcc)
메모리 부하량 테스트 실행
컴파일된 프로그램을 실행하여 메모리 부하량을 테스트할 수 있습니다.
# ./mem
이제 시스템의 메모리 사용량이 증가할 것입니다. 이를 확인하기 위해서는 다음 명령어를 사용할 수 있습니다.
# free -m
메모리 부하량 테스트 종료
메모리 부하량 테스트를 종료하려면, 해당 프로세스를 중지해야 합니다. 메모리 부하량 테스트를 실행한 터미널에서 Ctrl+C를 누르면 해당 프로세스가 종료됩니다.
메모리 부하량 테스트는 시스템의 메모리 사용량을 측정하는 데 사용되며, 시스템이 얼마나 많은 메모리를 사용할 수 있는지 확인하는 데 도움이 됩니다. 이를 위해서는 메모리 부하량 테스트 코드를 작성하고, 컴파일하여 실행 가능한 프로그램을 만들어야 합니다. 프로그램을 실행하면 시스템의 메모리 사용량이 증가하며, free 명령어를 사용하여 메모리 사용량을 확인할 수 있습니다. 프로세스를 중지하려면 해당 프로세스를 종료하면 됩니다.
디스크 부하량 테스트
디스크 부하량 테스트를 수행하는 방법은 여러 가지가 있습니다. 먼저, top 명령어를 사용하여 디스크 부하량을 모니터링할 수 있습니다. gnome-system-monitor 명령어를 사용하여도 디스크 부하량을 모니터링할 수 있습니다. 또한, watch 명령어를 이용하여 주기적으로 디스크 부하량을 모니터링할 수도 있습니다.
[TERM2] # top
gnome-system-monitor 명령어를 사용하여 디스크 부하량을 모니터링합니다.
[TERM3] # gnome-system-monitor
watch 명령어를 사용하여 디스크 부하량을 모니터링합니다.
watch -n 1 'df -h /'
다음과 같은 코드를 사용하여 디스크 부하량을 테스트할 수 있습니다.
# cat disk_exhaust.c
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
int main()
{
int fd;
char buf[10000];
fd=open("tempfile", O_WRONLY | O_CREAT, 0777);
unlink("./tempfile");
while(1)
write(fd, buf, sizeof(buf));
}
# gcc -o disk_exhaust disk_exhaust.c
# ./disk_exhaust
이를 통해 디스크 부하량을 쉽게 모니터링하고 필요에 따라 테스트할 수 있습니다.
lsof(List Open File) 명령어
프로세스에 의해 열려진 파일들에 대한 정보를 볼 수 있다. 이 명령어는 특정 파일을 접근하고 있는 프로세스인지 확인할 수 있어 매우 유용하다. 그래서 많은 시스템 관리자들이 자주 사용하는 프로세스이다.
이 명령어는 또한 특정 포트로 접속한 사용자를 확인하는데도 유용하다. 포트 접속 정보를 볼 수 있어 보안 관점에서도 매우 중요한 프로세스이다.
[명령어 형식]
# lsof
# lsof -p <PID번호>
# lsof -c <데몬명>
하지만 이 명령어를 사용할 때는 주의해야 할 점이 많습니다. 이 명령어는 매우 강력하며, 시스템에 문제를 일으킬 수 있습니다. 그러나, 이 명령어를 올바르게 사용하면 시스템의 성능을 향상시키고 유용한 정보를 얻을 수 있습니다.
출력 결과를 잘 필터링해서 사용해야 하며, 이를 위해 명령어에 사용할 수 있는 다양한 옵션이 있습니다. 이를 적절히 사용하면 필요한 정보를 더욱 쉽게 찾을 수 있습니다.
비전문가가 사용할 때는 불필요한 출력 결과를 걸러내는 것이 어려울 수 있습니다. 따라서, 이 명령어를 사용하기 전에는 반드시 관련 서적이나 웹사이트를 참고하고, 사용법을 잘 숙지해야 합니다. 또한, 명령어를 사용할 때는 시스템에 영향을 미칠 수 있는 가능성이 있으므로, 이를 염두에 두고 사용해야 합니다.
lsof 명령어 실습
lsof 명령어는 열려 있는 파일과 프로세스 정보를 제공하는 강력한 도구입니다. 이 문서에서는 lsof 명령어를 사용하여 프로세스와 관련된 파일에 대한 자세한 정보를 얻는 방법을 살펴보겠습니다.
# ps -ef | grep sendmail
root 7939 1 0 03:06 ? 00:00:00 sendmail: accepting connections
root 7960 7601 0 03:13 pts/3 00:00:00 grep sendmail
smmsp 25319 1 0 Jan26 ? 00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
"ps -ef | grep sendmail"와 "lsof -p 7939" 두 개의 명령어의 출력을 보여줍니다.
첫 번째 명령은 이름에 "sendmail"이라는 키워드를 가진 모든 프로세스를 나열하고, 두 번째 명령은 PID가 7939인 프로세스의 열린 파일을 나열합니다.
첫 번째 명령의 출력은 세 개의 프로세스를 보여줍니다. 하나는 연결을 수락하는 sendmail 데몬이며, 나머지 두 개는 명령 자체와 관련된 것입니다. (grep 명령과 클라이언트 메일 큐의 큐 러너)
# lsof -p 7939
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sendmail 7939 root cwd DIR 8,1 4096 3095078 /var/spool/mqueue
sendmail 7939 root rtd DIR 8,1 4096 2 /
sendmail 7939 root txt REG 8,1 806460 928207 /usr/sbin/sendmail.sendmail
sendmail 7939 root mem REG 8,1 1011184 1140250 /lib/libdb-4.3.so
..... (중략) .....
두 번째 명령의 출력은 sendmail 데몬 프로세스의 열린 파일에 대한 자세한 정보를 보여줍니다. 각 열린 파일에 대해 파일 디스크립터, 타입, 장치, 크기, inode 번호 및 파일 이름을 포함합니다.
위 명령은 PID가 7939인 프로세스에 대한 자세한 정보를 보여줍니다.
프로세스와 관련된 Unix command에 대한 다른 열과 해당 설명을 보여줍니다. 각 열의 의미와 기능을 이해하는 것은 프로세스의 동작 및 관련 파일 또는 디렉토리를 분석하는 데 중요합니다. 다양한 식별자 및 기술자를 익힘으로써 시스템 내에서 다른 프로세스의 흐름과 종속성을 더 잘 이해할 수 있습니다.
Column | 설명 |
Command | 프로세스와 관련된 Unix command 이름 |
PID | Process IDentification number |
PPID | Parent Process IDentification number(해당 프로세스의 부모 프로세스 ID) |
PGRP | Process Group IDentification number(해당 프로세스와 관련된 프로세스 그룹 ID) |
USER | 해당 프로세스를 소유한 사용자 ID 또는 login name |
FD | File Descriptor number (ex) cwd : current working directory r : read access / w : write access / u : read and write access |
TYPE | 해당 파일과 관련한 노드 타입 (ex) inet : Internet domain socket |
DEVICE | device number |
SIZE | SIZE/OFFSET : file 이나 file offset의 사이즈 |
OFFSET | INODE/NODE-ID : local file 의 node number 또는 Internet protocol type 또는 서버 호스트의 NFS file의 inode number, NAME : 해당 파일이 소속된 mount point나 파일 시스템의 이름 |
# lsof -i /* 현재 사용하고 있는 모든 소켓 상태를 확인 가능 */
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
portmap 1930 rpc 3u IPv4 5376 UDP *:sunrpc
portmap 1930 rpc 4u IPv4 5377 TCP *:sunrpc (LISTEN)
rpc.statd 1962 root 3u IPv4 5552 UDP *:869
rpc.statd 1962 root 6u IPv4 5529 UDP *:866
rpc.statd 1962 root 7u IPv4 5559 TCP *:872 (LISTEN)
# ssh root@172.16.9.252
root 사용자로 로그인
# lsof -i@172.16.9.252 (# netstat -apn | grep EST)
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 7561 root 3u IPv6 152794 TCP linux200:ssh->192.168.0.2:50259 (ESTABLISHED)
sshd 7599 root 3u IPv6 152898 TCP linux200:ssh->192.168.0.2:50261 (ESTABLISHED)
named 25482 named 21u IPv4 125320 TCP linux200:domain (LISTEN)
named 25482 named 513u IPv4 125319 UDP linux200:domain
# exit
# lsof -c sshd | more /* 특정 데몬이 사용하고 있는 모든 파일의 정보 출력 */
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 7476 root cwd DIR 8,1 4096 2 /
sshd 7476 root rtd DIR 8,1 4096 2 /
sshd 7476 root txt REG 8,1 408384 935283 /usr/sbin/sshd
sshd 7476 root mem REG 8,1 76400 2023272 /lib/libresolv-2.5.so
sshd 7476 root mem REG 8,1 45288 2023297 /lib/libcrypt-2.5.so
....
'lsof -i' 명령어는 현재 사용 중인 모든 소켓 상태를 확인하는 데 유용합니다. root 사용자로 ssh 명령어를 사용하여 로그인할 때는 주의하고 필요할 때만 사용하십시오. 'lsof -c sshd' 명령어는 sshd 데몬이 사용하는 모든 파일 정보를 출력하는 데 사용할 수 있습니다.
pCMD(ps, pmap, pstree, pwdx, ....)
# pmap PID
# pstree PID
# pwdx PID
lsof 명령어에는 더 많은 사용 방법이 있지만 이 문서가 lsof 명령어의 능력에 대한 좋은 소개를 제공했기를 바랍니다.
pmap 명령어
pmap 명령어는 프로세스가 사용하고 있는 메모리의 주소를 확인할 수 있습니다. 이 명령어를 사용하면 어떤 라이브러리가 실행될 때 로드되는지 살펴볼 수 있습니다. 라이브러리가 많이 로드될수록 시스템에 더 많은 메모리 부담이 가해질 수 있습니다.
명령어를 입력하는 방법은 아래와 같습니다.
# pmap PID
pmap 명령어를 사용하면 메모리 사용량을 확인할 수 있으므로, 시스템의 성능을 최적화하는 데 도움이 됩니다. 이 명령어를 사용하여 사용 중인 프로세스에 대한 정보를 얻고, 시스템이 메모리를 어떻게 사용하는지 이해할 수 있습니다.
pmap 명령어 사용법 실습
pmap 명령어는 프로세스가 사용하는 메모리 주소를 확인하는 데에 사용됩니다. 이 예제에서는 ID 가 8024 인 프로세스(sendmail: accepting connections)가 시스템의 다른 메모리 주소를 사용하고 있다는 것을 확인할 수 있습니다. 명령어의 출력은 프로세스가 사용하는 메모리 영역의 목록과 권한 및 오프셋을 표시합니다.
# ps -ef | grep senmail (# pgrep -lf sendmail)
root 8024 1 0 03:28 ? 00:00:00 sendmail: accepting connections
smmsp 8032 1 0 03:28 ? 00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmq ueue
root 8073 8040 0 03:28 pts/1 00:00:00 grep sendmail
# pmap 8024/* 프로세스가 사용하고 있는 메모리의 주소를 확인 */
8024: sendmail: accepting connections
00110000 1192K r-x-- /lib/libcrypto.so.0.9.8e
0023a000 76K rwx-- /lib/libcrypto.so.0.9.8e
0024d000 16K rwx-- [ anon ]
00251000 980K r-x-- /lib/libdb-4.3.so
00346000 12K rwx-- /lib/libdb-4.3.so
00349000 36K r-x-- /lib/libcrypt-2.5.so
..... (중략) .....
00fcf000 68K r-x-- /lib/libresolv-2.5.so
00fe0000 4K r-x-- /lib/libresolv-2.5.so
00fe1000 4K rwx-- /lib/libresolv-2.5.so
00fe2000 8K rwx-- [ anon ]
09c2e000 404K rw--- [ anon ]
b7f9f000 28K rw--- [ anon ]
bf95a000 200K rw--- [ stack ]
total 9432K
출력의 첫 번째 열은 프로세스에서 사용하는 메모리 주소 범위를 지정하고, 두 번째 열은 메모리 영역의 크기를 보여줍니다. 세 번째 열은 읽기/쓰기/실행과 같은 메모리 영역의 권한 플래그를 보여줍니다. 네 번째 열은 메모리 영역에 매핑된 파일 또는 장치를 보여줍니다.
장기간 실행되거나 자원 집약적인 애플리케이션의 메모리 사용 패턴을 이해하는 것은 중요합니다. pmap 명령어는 메모리 사용량을 조사하고 메모리 단편화, 메모리 누수 또는 기타 메모리 관련 문제와 관련된 문제를 진단하는 데 유용한 도구입니다.
pstree 프로세스 상관도
pstree는 실행 중인 프로세스 상태를 트리 구조로 보여주는 명령어입니다. 이 명령어는 프로세스의 부모 자식관계를 형태로 보여주어 사용자가 쉽게 이해할 수 있도록 합니다. 이 명령어를 사용하여 시스템 내에서 실행되고 있는 모든 프로세스를 확인할 수 있습니다. 또한 사용자가 원하는 PID나 유저네임을 입력하여 특정 프로세스만을 확인할 수 있습니다.
pstree 명령어는 다음과 같은 형식으로 사용할 수 있습니다.
# pstree (# pstree –l)
# pstree PID
# pstree user01
이 명령어를 사용하면 프로세스 상태를 자세히 파악할 수 있어, 시스템 관리자나 개발자들에게 매우 유용합니다. 또한, pstree 명령어를 사용하여 프로세스 간의 의존성을 파악하고, 시스템의 문제점을 해결할 수 있습니다. 따라서, 시스템 관리자나 개발자는 이 명령어를 잘 활용하여 시스템의 안정성을 유지할 수 있도록 노력해야 합니다.
또한, 프로세스 관리는 시스템 관리의 중요한 부분 중 하나입니다. 시스템 관리자는 프로세스 상태를 주기적으로 모니터링하고, 문제가 발생할 경우 적절히 대처할 수 있어야 합니다. 이를 위해, 시스템 관리자는 프로세스 상태를 파악하는 다양한 도구들을 활용할 수 있습니다. 예를 들어, top 명령어와 같은 프로세스 모니터링 도구를 사용하여 프로세스 상태를 모니터링하고, 문제가 발생할 경우 이를 신속하게 파악할 수 있습니다.
이처럼, 시스템 관리자나 개발자는 다양한 도구들을 잘 활용하여 시스템의 안정성을 유지하고, 문제가 발생할 경우 적절히 대처할 수 있도록 노력해야 합니다.
(선수작업) 필요하다면, 다음 명령어를 실행하여 프로세스 목록과 시간 정보를 확인할 수 있습니다.
# ps
위 명령어를 실행하면 현재 실행 중인 프로세스의 목록이 나타납니다.
여기에 추가로, 다음 명령어를 실행하여 프로세스를 생성하고 프로세스가 실행되는 동안 일정 시간 동안 대기할 수 있습니다.
# sleep 500 &
# sleep 600 &
# sleep 700 &
위 명령어를 실행하면, 3 개의 프로세스가 생성됩니다. 각각의 프로세스는 500, 600 및 700 초 동안 실행되고 대기하게 됩니다.
마지막으로, 프로세스 목록을 다시 확인하려면 다시 ps 명령어를 실행하면 됩니다.
# ps
위 명령어를 실행하면 총 4 개의 프로세스가 실행 중인 것을 확인할 수 있습니다.
# ps
PID TTY TIME CMD
8040 pts/1 00:00:00 bash
8077 pts/1 00:00:00 sleep
8082 pts/1 00:00:00 sleep
8083 pts/1 00:00:00 sleep
8099 pts/1 00:00:00 ps
# pstree -l /* 프로세스의 관계를 길게 출력 */
init-┬─acpid
├─atd
├─auditd─┬─audispd───{audispd}
│ └─{auditd}
├─automount───4*[{automount}]
├─avahi-daemon───avahi-daemon
├─bonobo-activati───{bonobo-activati}
├─brcm_iscsiuio───3*[{brcm_iscsiuio}]
├─bt-applet
├─clock-applet
├─crond
├─cupsd
├─2*[dbus-daemon]
├─dbus-launch
├─eggcups
├─escd───{escd}
├─events/0
├─gam_server
├─gconfd-2
├─gdm-binary───gdm-binary─┬─Xorg
│ └─gnome-session───Xsession
├─gdm-rh-security───{gdm-rh-security}
├─gnome-keyring-d
├─gnome-panel
├─gnome-power-man
├─gnome-screensav
├─gnome-settings-───{gnome-settings-}
├─gnome-terminal─┬─bash
│ ├─gnome-pty-helpe
│ └─{gnome-terminal}
├─gnome-vfs-daemo
├─gnome-volume-ma
├─gpm
├─hald───hald-runner─┬─hald-addon-acpi
│ ├─hald-addon-keyb
│ └─hald-addon-stor
├─hcid
├─hidd
├─hpiod
├─httpd─┬─8*[httpd]
│ └─{httpd}
├─2*[iscsid]
├─khelper
├─klogd
├─krfcommd
├─ksoftirqd/0
├─kthread─┬─aio/0
│ ├─ata/0
│ ├─ata_aux
│ ├─cqueue/0
│ ├─ib_addr
│ ├─ib_cm/0
│ ├─ib_inform
│ ├─ib_mcast
│ ├─iscsi_eh
│ ├─iw_cm_wq
│ ├─iw_cxgb3
│ ├─kacpid
│ ├─kauditd
│ ├─kblockd/0
│ ├─kgameportd
│ ├─khubd
│ ├─kjournald
│ ├─kmpath_handlerd
│ ├─kmpathd/0
│ ├─kpsmoused
│ ├─kseriod
│ ├─kstriped
│ ├─kswapd0
│ ├─local_sa
│ ├─mpt_poll_0
│ ├─2*[pdflush]
│ ├─rdma_cm
│ ├─rpciod/0
│ └─scsi_eh_0
├─mapping-daemon
├─metacity
├─migration/0
├─6*[mingetty]
├─mixer_applet2───{mixer_applet2}
├─named───3*[{named}]
├─nautilus
├─nm-applet
├─nm-system-setti
├─notification-ar
├─nss_pcache
├─pam-panel-icon───pam_timestamp_c
├─pcscd───3*[{pcscd}]
├─portmap
├─puplet
├─python
├─rpc.idmapd
├─rpc.statd
├─scim-bridge
├─scim-helper-man
├─2*[scim-launcher]
├─scim-panel-gtk───{scim-panel-gtk}
├─sdpd
├─2*[sendmail]
├─smartd
├─sshd───sshd───bash─┬─pstree
│ └─2*[sleep]
├─syslogd
├─trashapplet
├─udevd
├─uuidd
├─watchdog/0
├─wnck-applet
├─xfs
├─xinetd
└─yum-updatesd
# pstree 8040 /* 프로세스간의 부모 자식관계를 트리 형태로 보여 줌 */
bash ─┬─pstree
└─3*[sleep]
주어진 코드는 실행 중인 프로세스와 각각의 프로세스 ID를 보여주는 목록을 나타냅니다. 이 정보를 표시하기 위해 ps 명령어가 사용되었습니다. pstree 명령어는 프로세스의 계층 구조를 트리 모양으로 표시합니다. 코드는 또한 acpid, atd, auditd, automount, avahi-daemon, bonobo-activati, brcm_iscsiuio, bt-applet, clock-applet, crond, cupsd, dbus-daemon, dbus-launch, eggcups, escd, events/0, gam_server, gconfd-2, gdm-binary, gdm-rh-security, gnome-keyring-d, gnome-panel, gnome-power-man, gnome-screensav, gnome-settings-, gnome-terminal, gnome-vfs-daemo, gnome-volume-ma, gpm, hald, hcid, hidd, hpiod, httpd, iscsid, khelper, klogd, krfcommd, ksoftirqd/0, kthread, mapping-daemon, metacity, migration/0, mingetty, mixer_applet2, named, nautilus, nm-applet, nm-system-setti, notification-ar, nss_pcache, pam-panel-icon, pcscd, portmap, puplet, python, rpc.idmapd, rpc.statd, scim-bridge, scim-helper-man, scim-launcher, scim-panel-gtk, sdpd, sendmail, smartd, sshd, syslogd, trashapplet, udevd, uuidd, watchdog/0, wnck-applet, xfs, xinetd 및 yum-updatesd의 각 프로세스가 수행하는 작업에 대한 간단한 설명을 포함하고 있습니다. 코드는 이미 정보가 많이 들어 있지만, 더 자세하게 설명할 수 있습니다. 예를 들어, 각 프로세스가 어떤 역할을 수행하고 다른 프로세스와 어떻게 상호 작용하는지 설명할 수 있습니다. bash 프로세스의 목적과 중요성에 대해서도 더 자세히 설명할 수 있습니다. 전반적으로 코드를 더 자세하고 포괄적으로 만들어 시스템 프로세스를 이해하는 데 도움이 되도록 할 수 있습니다.
[참고] 실습을 위한 준비
아래는 bash 명령어를 사용할 때 정확한 사용법을 연습하기 위한 준비 과정입니다.
위 코드는 Bash를 사용하여 다른 Bash 프로세스를 실행하고, 실행 중인 프로세스를 확인하고 종료하는 방법을 보여줍니다. 코드를 단계 별로 분할하여 설명하겠습니다.
Bash 실행하기
bash
위의 명령어는 새로운 Bash 인스턴스를 실행합니다. 이제 새로운 Bash 프로세스가 실행 중입니다.
다른 Bash 실행하기
bash
위의 명령어는 또 다른 Bash 인스턴스를 실행합니다. 이제 두 개의 Bash 프로세스가 실행 중입니다.
또 다른 Bash 실행하기
bash
위의 명령어는 또 다른 Bash 인스턴스를 실행합니다. 이제 세 개의 Bash 프로세스가 실행 중입니다.
실행 중인 프로세스 확인하기
pstree 8040
위의 명령어는 현재 실행 중인 프로세스를 나열합니다. 이 경우 8040은 Bash 프로세스의 PID입니다.
Bash 프로세스와 함께 sleep 프로세스 3개 실행하기
bash─┬─bash───bash───pstree
└─3*[sleep]
위의 명령어는 Bash 프로세스와 함께 sleep 프로세스 3개를 실행합니다. 이제 총 5개의 프로세스가 실행 중입니다.
Bash 종료하기
exit
위의 명령어는 현재 실행 중인 Bash 프로세스를 종료합니다. 이제 4개의 프로세스가 실행 중입니다.
또 다른 Bash 종료하기
exit
위의 명령어는 또 다른 Bash 프로세스를 종료합니다. 이제 3개의 프로세스가 실행 중입니다.
실행 중인 프로세스 확인하기
jobs
위의 명령어는 현재 실행 중인 프로세스를 나열합니다. 이 경우, 현재 실행 중인 프로세스는 없습니다.
실행 중인 프로세스 중 하나 종료하기
kill %1
위의 명령어는 실행 중인 첫 번째 프로세스를 종료합니다. 이 경우, 첫 번째 프로세스는 Bash 프로세스입니다.
실행 중인 프로세스 중 다른 하나 종료하기
kill %2
위의 명령어는 실행 중인 두 번째 프로세스를 종료합니다. 이 경우, 두 번째 프로세스는 또 다른 Bash 프로세스입니다.
실행 중인 프로세스 중 또 다른 하나 종료하기
kill %3
위의 명령어는 실행 중인 세 번째 프로세스를 종료합니다. 이 경우, 세 번째 프로세스는 sleep 프로세스 중 하나입니다.
이제 모든 프로세스가 종료되었습니다.
위 명령어들을 실행하면서 bash 명령어의 사용법과 함께 다양한 예시를 연습해보세요.
pwdx CMD
대상 프로세스의 현재 작업 디렉토리를 얻을 수 있다.
pwdx 명령어는 대상 프로세스의 현재 작업 디렉토리를 확인할 수 있습니다. 위의 예시에서는 PID가 21716인 프로세스인 bash가 /root에서 실행되고 있습니다. 이후 /etc/sysconfig으로 디렉토리를 변경하고 pwdx 명령어를 실행하면 21716 프로세스가 /etc/sysconfig에서 실행되고 있음을 확인할 수 있습니다.
# ps
PID TTY TIME CMD
21716 pts/2 00:00:00 bash
# pwdx 21716
21716: /root
# cd /etc/sysconfig
# pwdx 21716
21716: /etc/sysconfig
이 명령어는 리눅스 시스템에서 유용하게 사용될 수 있습니다. 프로세스가 어느 디렉토리에서 실행되고 있는지 확인하고자 할 때 pwdx 명령어를 사용해보세요!
nice / renice 명령어
프로세스를 실행하는데 있어서 프로세스에게 우선권을 부여 할 수 있다. 일반적으로 프로세스들은 설정된 우선권 순위대로 실행이 되는데 nice 명령을 사용하게 되면 프로세스의 실행 우선권을 바꿀 수 있다. 우선권 순위는 -20에서 19까지의 범위를 가지며 nice 값이 적을수록 우선순위 값이 높아지게 된다.
프로세스의 우선순위: 프로세스가 운영체제의 CPU를 선점할 수 있는 권한
(프로세스의 우선순위를 조정하는 명령어)
리눅스에서는 다양한 명령어를 사용하여 프로세스를 관리할 수 있습니다. 이 중에서도 자주 사용되는 명령어에는 nice와 renice가 있습니다.
nice 명령어는 프로그램을 실행할 때 프로세스의 우선순위를 설정할 수 있는 명령어입니다. 우선순위는 -20에서 19까지의 범위를 가지며, nice 값이 작을수록 우선순위 값이 높아집니다. 실행 중인 프로그램의 우선순위를 조정하고자 할 때는 renice 명령어를 사용할 수 있습니다.
프로세스의 우선순위를 설정하는 이유는 프로세스가 운영체제의 CPU를 선점할 수 있는 권한을 가지기 때문입니다. 이를 적절히 관리하지 않으면 시스템의 안정성과 성능에 영향을 줄 수 있습니다.
또한 ps 명령어를 사용하여 현재 실행 중인 프로세스를 확인할 수 있습니다. 아래는 ps 명령어를 사용하여 확인한 예시입니다.
# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 2489 2487 0 80 0 - 6514 - pts/0 00:00:00 bash
0 R 0 124535 2489 0 80 0 - 10800 - pts/0 00:00:00 ps
위와 같이 ps 명령어를 사용하면 프로세스의 상태와 우선순위 등의 정보를 확인할 수 있습니다. 이를 통해 프로세스를 적절히 관리하여 시스템의 안정성과 성능을 유지할 수 있습니다.
추가로 pwdx 명령어는 대상 프로세스의 현재 작업 디렉토리를 확인할 수 있습니다. 이 명령어는 리눅스 시스템에서 유용하게 사용될 수 있습니다.
이와 같은 명령어들을 적절하게 활용하여 프로세스를 관리하면 시스템의 안정성과 성능 향상에 큰 도움이 됩니다.
[명령어 형식]
아래는 리눅스에서 사용되는 nice와 renice 명령어입니다.
nice 명령어 nice 명령어는 프로세스의 우선순위를 변경하는 명령어입니다. nice 명령어 뒤에는 우선순위값을 지정할 수 있습니다. 우선순위값은 -20에서 19까지의 값을 가질 수 있으며, 기본값은 0입니다. 아래는 명령어 형식과 예시입니다.
# CMD (EX: # backup.sh)
# nice -(-20 ~ 19) CMD(EX: # nice -10 backup.sh (NI: 10))
# nice -n (-20 ~ 19) CMD(EX: # nice --10 backup.sh (NI: -10))
renice 명령어 renice 명령어는 이미 실행 중인 프로세스의 우선순위를 변경하는 명령어입니다. renice 명령어 뒤에는 프로세스의 PID값과 우선순위값을 지정할 수 있습니다. 우선순위값은 -20에서 20까지의 값을 가질 수 있으며, 기본값은 0입니다. 아래는 명령어 형식과 예시입니다.
# renice (-20 ~ 20) PID(EX: # renice 10 PID (NI: 10))
# renice -n (-20 ~ 20) PID(EX: # renice -10 PID (NI: -10))
위에서 설명한 nice와 renice 명령어를 사용하여 프로세스의 우선순위를 변경할 수 있습니다. 이 명령어들은 시스템 관리자들에게 유용한 도구입니다.
nice 명령어 실습
# sleep 500 &
[1] 8077
# sleep 600 &
[2] 8082
# nice -(-20 ~ 19) CMD
# nice -n (-20 ~ 19) CMD
# nice -15 sleep 700 & (# nice -n 15 sleep 700 &)
[3] 8083
# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 2489 2487 0 80 0 - 6514 - pts/0 00:00:00 bash
0 S 0 124545 2489 0 80 0 - 1429 hrtime pts/0 00:00:00 sleep
0 S 0 124546 2489 0 80 0 - 1429 hrtime pts/0 00:00:00 sleep
0 S 0 124566 2489 0 95 15 - 1429 hrtime pts/0 00:00:00 sleep
0 R 0 124567 2489 0 80 0 - 10800 - pts/0 00:00:00 ps
# nice --15 sleep 800 & (# nice -n -15 sleep 800 &)
# ps –l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 2489 2487 0 80 0 - 6514 - pts/0 00:00:00 bash
0 S 0 124545 2489 0 80 0 - 1429 hrtime pts/0 00:00:00 sleep
0 S 0 124546 2489 0 80 0 - 1429 hrtime pts/0 00:00:00 sleep
0 S 0 124566 2489 0 95 15 - 1429 hrtime pts/0 00:00:00 sleep
4 S 0 124576 2489 0 65 -15 - 1429 hrtime pts/0 00:00:00 sleep
0 R 0 124577 2489 0 80 0 - 10800 - pts/0 00:00:00 ps
# renice (-20 ~ 20) PID
# renice -n (-20 ~ 20) PID
# renice -5 124566
124566 (process ID) old priority 15, new priority -5
# ps –l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 2489 2487 0 80 0 - 6514 - pts/0 00:00:00 bash
0 S 0 124545 2489 0 80 0 - 1429 hrtime pts/0 00:00:00 sleep
0 S 0 124546 2489 0 80 0 - 1429 hrtime pts/0 00:00:00 sleep
0 S 0 124566 2489 0 75 -5 - 1429 hrtime pts/0 00:00:00 sleep
4 S 0 124576 2489 0 65 -15 - 1429 hrtime pts/0 00:00:00 sleep
0 R 0 124589 2489 0 80 0 - 10800 - pts/0 00:00:00 ps
# renice 5 124576
124576 (process ID) old priority -15, new priority 5
# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 2489 2487 0 80 0 - 6514 - pts/0 00:00:00 bash
0 S 0 124545 2489 0 80 0 - 1429 hrtime pts/0 00:00:00 sleep
0 S 0 124546 2489 0 80 0 - 1429 hrtime pts/0 00:00:00 sleep
0 S 0 124566 2489 0 75 -5 - 1429 hrtime pts/0 00:00:00 sleep
4 S 0 124576 2489 0 85 5 - 1429 hrtime pts/0 00:00:00 sleep
0 R 0 124600 2489 0 80 0 - 10800 - pts/0 00:00:00 ps
nice, renice 사용 예
(백업스크립트/데이터수집 스크립트)
(X) # /root/bin/backup.sh &
(0) # nice -n 10 /root/bin/backup.sh &
(부하량을 주는 프로그램)
# top
# renice 10 PID (PID : 부하량을 주는 프로그램's PID)
리눅스 시스템은 다양한 프로세스들이 동시에 실행되면서 시스템 리소스를 공유합니다. 이 때, 프로세스의 우선순위에 따라 우선적으로 리소스를 할당받을 수 있습니다. 이를 통해 우선순위가 높은 프로세스는 더 많은 CPU 시간을 할당받아 빠르게 실행될 수 있습니다.
그러나, 모든 프로세스가 높은 우선순위를 가진다면 시스템 리소스를 공유하는 다른 프로세스들은 실행이 느려지거나 중단될 수 있습니다. 이는 시스템의 안정성과 성능에 부정적인 영향을 미칩니다.
따라서, 시스템 관리자는 프로세스의 우선순위를 적절하게 관리하여 시스템의 안정성과 성능을 유지해야 합니다. 이를 위해 리눅스에서는 nice 및 renice 명령어를 사용합니다.
nice 명령어는 실행할 프로세스의 우선순위를 설정하는 명령어입니다. 우선순위 값은 -20에서 19까지의 값으로 설정할 수 있으며, 값이 높을수록 우선순위가 높아지게 됩니다. renice 명령어는 이미 실행 중인 프로세스의 우선순위를 변경하는 명령어입니다. 이를 통해 이미 실행 중인 프로세스의 우선순위를 변경하여 시스템의 안정성과 성능을 유지할 수 있습니다.
추가적으로, top 명령어를 사용하여 실행 중인 프로세스들의 상태를 모니터링할 수 있습니다. top 명령어는 CPU 사용량, 메모리 사용량, 프로세스 ID 등의 정보를 제공하며, 현재 실행 중인 프로세스들의 우선순위를 확인할 수 있습니다.
또한, 프로세스의 우선순위 설정에 따라 시스템의 성능이 크게 달라질 수 있습니다. 예를 들어, 웹 서비스를 운영하는 서버에서는 웹 서비스용 프로세스의 우선순위를 높게 설정하여 빠른 응답 속도를 유지할 수 있습니다. 반면, 데이터베이스 서버에서는 데이터베이스 용 프로세스의 우선순위를 높게 설정하여 데이터베이스 처리 속도를 향상시킬 수 있습니다.
따라서, 시스템 관리자는 프로세스 우선순위 설정에 대해 잘 이해하고, 적절한 설정을 통해 시스템의 안정성과 성능을 유지해야 합니다.
리눅스 시스템은 다양한 프로세스들이 동시에 실행되면서 시스템 리소스를 공유합니다. 이 때, 프로세스의 우선순위에 따라 우선적으로 리소스를 할당받을 수 있습니다. 이를 통해 우선순위가 높은 프로세스는 더 많은 CPU 시간을 할당받아 빠르게 실행될 수 있습니다. 그러나, 모든 프로세스가 높은 우선순위를 가진다면 시스템 리소스를 공유하는 다른 프로세스들은 실행이 느려지거나 중단될 수 있습니다. 이는 시스템의 안정성과 성능에 부정적인 영향을 미칩니다. 따라서, 시스템 관리자는 프로세스의 우선순위를 적절하게 관리하여 시스템의 안정성과 성능을 유지해야 합니다. 이를 위해 리눅스에서는 nice 및 renice 명령어를 사용합니다. nice 명령어는 실행할 프로세스의 우선순위를 설정하는 명령어입니다. 우선순위 값은 -20에서 19까지의 값으로 설정할 수 있으며, 값이 높을수록 우선순위가 높아지게 됩니다. renice 명령어는 이미 실행 중인 프로세스의 우선순위를 변경하는 명령어입니다. 이를 통해 이미 실행 중인 프로세스의 우선순위를 변경하여 시스템의 안정성과 성능을 유지할 수 있습니다. 추가적으로, top 명령어를 사용하여 실행 중인 프로세스들의 상태를 모니터링할 수 있습니다. top 명령어는 CPU 사용량, 메모리 사용량, 프로세스 ID 등의 정보를 제공하며, 현재 실행 중인 프로세스들의 우선순위를 확인할 수 있습니다. 또한, 프로세스의 우선순위 설정에 따라 시스템의 성능이 크게 달라질 수 있습니다. 예를 들어, 웹 서비스를 운영하는 서버에서는 웹 서비스용 프로세스의 우선순위를 높게 설정하여 빠른 응답 속도를 유지할 수 있습니다. 반면, 데이터베이스 서버에서는 데이터베이스 용 프로세스의 우선순위를 높게 설정하여 데이터베이스 처리 속도를 향상시킬 수 있습니다. 따라서, 시스템 관리자는 프로세스 우선순위 설정에 대해 잘 이해하고, 적절한 설정을 통해 시스템의 안정성과 성능을 유지해야 합니다.
기본적으로 PRIority NIce 프로세스를 실행하면 NICE 값이 기본값으로 설정되어 80의 우선순위 값을 갖습니다. 이후 프로세스의 우선순위 값을 변경할 수 있습니다. 그렇다면 이미 실행 중인 프로세스는 PRI 값이 변경되지 않는걸까요?
FREE 명령어는 buffer와 available로 구성되어 있습니다. buffer는 현재 임시 데이터로 사용되고 있는 영역을 의미하며 available은 당장 사용 가능한 영역입니다.
이러한 정보를 이해하면 시스템의 상태를 더욱 잘 파악할 수 있습니다. 예를 들어, 실행 중인 프로세스의 PRI 값을 변경하기 위해서는 변경하고자 하는 프로세스의 ID 값을 찾아야 합니다. 그리고 이후에는 프로세스의 우선순위 값을 변경할 수 있습니다. 이렇게 프로세스의 우선순위 값을 잘 조절하면 시스템의 성능을 더욱 향상시킬 수 있습니다. 또한, FREE 명령어를 통해 buffer와 available 값을 확인하면 시스템의 자원 사용 상태를 더욱 잘 파악할 수 있습니다. 이러한 정보를 바탕으로 우리는 시스템의 상태를 더욱 잘 파악하고, 성능을 최적화할 수 있습니다.