설명
psinfo 명령어는 프로세스의 상태정보를 보여주는 명령어이다.
psinfo 명령어를 옵션 없이 실행하면, CPU 사용률이 제일 많은 순서로 20개의 프로세스를 화면에
출력한다. 이 결과를 가지고 시스템에서 CPU를 많이 사용하고 있는 프로세스가 무엇인지 확인할 수 있다.
# psinfo
Date.time 0729.12:45:34 proc 173 zomb 0 run 1 lwp 234 cpu 10.11% load1m 0.11 ptime 1208.0834 hp+stk 280.8M
PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
315 829 root 20.67M 19.37M 7.492M S 1 3.76% 3.76% 15.9% 0d33544 10:12.0102 netscape
471 389 guest 7.719M 4.977M 1.289M S 6 1.67% 1.67% 4.1% 0d33407 02:00.0102 dtwm
526 425 guest 13.60M 10.68M 7.781M S 1 1.30% 1.30% 8.7% 0d33395 34.1232 dtterm -sdtserver
3216 1222 root 1.078M 0.906M 0.070M O 1 1.10% 1.10% 0.7% 0d10 19.0832 gwserv
3870 2484 root 4.445M 3.930M 0.469M S 1 0.17% 0.17% 3.2% 0d2043 05.6749 perfmon
... skip ...
|
또한 -h 옵션을 사용하면, 프로세스가 실행되면서 다이나믹하게 할당 받은 메모리 크기
순서로 정렬하여 볼 수 있다.
# /opt/JSparm/bin/psinfo -h
Date.time 0123.12:27:07 proc 119 zomb 5 run 2 lwp 324 cpu 15.26% load1m 0.24 ptime 3298.2787 hp+stk 250.3M
PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
19440 19438 guest 131.0M 84.38M 107.4M R 1 4.90% 4.90% 17.0% 8d73139 03:00:59.8623 netscape
13217 13216 nobody 44.42M 10.82M 26.12M S 59 0.00% 0.00% 2.2% 1d7702 16.1458 ns-httpd -d config
200 1 root 6.070M 1.555M 2.875M S 10 0.00% 0.00% 0.3% 58d11424 16.6110 /usr/sbin/syslogd
283 1 oracle 63.89M 41.88M 2.547M S 1 0.00% 0.00% 8.5% 58d11409 09.8534 ora_pmon_SOL
19345 19325 guest 9.258M 6.805M 2.141M S 7 0.68% 0.68% 1.4% 8d73245 05:59.8349 dtwm
19904 19903 guest 7.172M 4.438M 1.594M S 1 0.00% 0.00% 0.9% 8d66806 09.3740 dtpad -server
19339 1 guest 4.383M 3.250M 1.266M S 4 0.00% 0.00% 0.7% 8d73246 26.7633 /usr/dt/bin/ttsession
285 1 oracle 63.02M 44.93M 1.258M S 22 0.00% 0.00% 9.1% 58d11409 02.3392 ora_dbw0_SOL
... skip ...
|
프로세스가 메모리를 할당 받으면, 그 메모리는 heap 영역을 차지한다. 만일 프로세스의
heap의 크기가 큰 프로세스가 있다면, 프로세스가 그 만큼의 메모리를 차지하는 프로세스인지
판단하여야 한다. 만일 프로그램의 특성상 메모리를 많이 사용할 필요가 없는 프로세스가
메모리를 많이 사용한다면, 그 프로세스가 메모리를 잘못 관리하기 때문이다.
-e 옵션을 사용하면, 최근에 실행된 순서로 프로세스 정보를 보여준다.
# /opt/JSparm/bin/psinfo -e
Date.time 0312.21:37:59 proc 69 zomb 1 run 0 lwp 150 cpu 1.49% load1m 0.05 ptime 12380.2334 hp+stk 67.21M
PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
1812 1811 root 1.242M 1.008M 0.117M O 1 0.29% 0.29% 0.8% 0d0 00.0623 psinfo -e
1811 432 root 0.289M 0.289M 0.023M S 1 0.27% 0.27% 0.2% 0d5 00.0732 sh
1813 407 guest 1.711M 1.180M 0.039M S 1 0.03% 0.03% 1.0% 0d29 00.0346 more /etc/termcap
1791 1 root 0.672M 0.305M 0.062M S 1 0.00% 0.00% 0.3% 0d416 00.0500 /sbin/dhcpagent
1788 419 root 0.289M 0.289M 0.023M S 1 0.00% 0.00% 0.2% 0d421 00.0602 sh
1791 1 root 0.672M 0.305M 0.062M S 1 0.00% 0.00% 0.3% 0d535 00.0523 /sbin/dhcpagent
1788 419 root 0.289M 0.289M 0.023M S 1 0.00% 0.00% 0.2% 0d540 00.0602 sh
723 722 guest 20.00M 4.672M 0.148M S 1 0.00% 0.00% 3.9% 0d5196 00.1629 (dns helper)
722 427 guest 42.64M 34.20M 20.82M S 1 0.04% 0.04% 28.8% 0d5196 01:04.3402 /opt/netscape/netscape
432 391 guest 1.828M 1.219M 0.055M S 1 0.00% 0.00% 1.0% 1d340 00.8355 /usr/bin/ksh
... skip ...
|
이 옵션을 사용하여 최근에 실행된 프로세스가 무엇인지 확인할 수 있다. 여기서 ELAPSED에 표시된 숫자의
의미는 다음과 같다.
days d seconds
1d340 은 그 프로세스가 실행된지 1일 340초가 지났다는 의미이다.
즉, 그 프로세스가 1일 340초 전에 실행되었다는 것을 의미한다.
psinfo 명령어의 옵션을 사용하면, 다음과 같은 컬럼에 대하여 정렬하는
순서를 지정할 수 있다.
컬럼 | 설명 | 옵션 |
SIZE | 메모리가 큰 프로세스 순서 | psinfo -s |
RSS | 프로세스 메모리 중에 물리적 메모리에 많이 적재된 프로세스 순서 | psinfo -r |
HP+STK | Heap 과 Stack을 더한 크기가 큰 프로세스 순서 | psinfo -h |
NLWP | LWP(light-weight process)가 많은 프로세스 순서 | psinfo -l |
WCPU%, CPU% | CPU 사용률이 많은 프로세스 순서
WCPU% = CPU% * number of processors(CPU)
| psinfo [-c] |
MEM% | 메모리 사용률이 많은 프로세스 순서(RSS 순서와 같음) | psinfo -m |
ELAPSED | 최근에 실행된 프로세스 순서 | psinfo -e |
TIME | CPU의 누적 사용시간이 많은 프로세스 순서 | psinfo -T |
CHILDTIME | 자식 프로세스의 CPU의 누적 사용시간이 많은 프로세스 순서 | psinfo -C |
NPROC | 프로세스 개수가 많은 순서.( -S 또는 -U 옵션에서만 사용 가능) |
psinfo -S -n psinfo -U -n
|
-f 옵션을 사용하면, 80 컬럼 터미널에 맞게 출력되도록 몇 개의 컬럼을 표시하지 않고,
명령어 라인 대신 명령어 이름(CMD)만 표시한다.
# /opt/JSparm/bin/psinfo -f
Date.time 0312.21:54:37 proc 69 zomb 0 run 0 lwp 151 cpu 5.44% load1m 0.07 ptime 12380.7330 hp+stk 67.35M
PID USERNAME HP+STK S NLWP WCPU% CPU% ELAPSED TIME CMD
272 guest 14.71M S 1 2.09% 2.09% 0d9430 02:10.2363 Xsun
722 guest 20.82M S 1 1.29% 1.29% 0d6194 01:35.2238 netscape
1808 guest 0.047M S 1 0.72% 0.72% 0d1103 01.3934 vi
391 guest 7.484M S 1 0.46% 0.46% 0d9360 21.3402 dtterm
330 guest 10.78M S 15 0.35% 0.35% 0d9378 22.1340 java
1821 root 0.117M O 1 0.29% 0.29% 0d0 00.0623 psinfo
390 guest 1.070M S 1 0.10% 0.10% 0d9360 00.6134 dtterm
371 guest 1.633M S 8 0.09% 0.09% 0d9369 20.2816 dtwm
271 root 0.164M S 12 0.02% 0.02% 0d9432 04.3581 mibiisa
3 root 0.016M S 1 0.02% 0.02% 0d9492 03.8195 fsflush
0 root 0.016M T 1 0.00% 0.00% 0d9495 00.2208 sched
1 root 0.078M S 1 0.00% 0.00% 0d9492 00.1430 init
... skip ...
|
모든 프로세스의 내용을 보려면,   # psinfo -a 를 사용할 수 있다. 이 경우에는
프로세스의 정렬 순서는 없다.
만일 60초 간격으로 100회 동안 CPU를 많이 사용하는 프로세스 순서로 보고 싶다면, 다음과 같이 할 수 있다.
# psinfo 60 100
... skip ...
|
만일 프로세스 정보를 저장한 후에 나중에 그 내용을 분석하려면 # psinfo -A를 사용하여
저장하여야 한다. -A 옵션으로 수집한 데이타는 psparse 명령어를
사용하여 다양한 정렬 순서로 가공해 볼 수 있다.
# psinfo -A 60 600 > psinfo-A.log
# psparse pspinfo-A.log
... skip ...
# psparse -h pspinfo-A.log
... skip ...
# psparse -S pspinfo-A.log
... skip ...
|
만일 특정 프로세스를 계속 모니터하고 싶을 경우에는 다음과 같이 -p 옵션을 사용할 수 있다.
# psinfo -p 1964 5
PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
1964 1911 guest 1.227M 1.000M 0.039M R 1 1.73% 1.73% 0.8% 0d6 00.3212 find / -print
1964 1911 guest 1.227M 1.000M 0.039M S 1 2.68% 2.68% 0.8% 0d11 00.6710 find / -print
1964 1911 guest 1.227M 1.000M 0.039M R 1 3.49% 3.49% 0.8% 0d16 01.2929 find / -print
1964 1911 guest 1.227M 1.000M 0.039M S 1 4.44% 4.44% 0.8% 0d21 01.7935 find / -print
1964 1911 guest 1.227M 1.000M 0.039M S 1 4.77% 4.77% 0.8% 0d26 01.9333 find / -print
1964 1911 guest 1.227M 1.000M 0.039M S 1 5.03% 5.03% 0.8% 0d31 02.2391 find / -print
... skip ...
|
위의 명령어는 PID 1964인 프로세스를 5초 간격으로 조사하여 화면에 출력한다.
만일, 일정 조건에 해당하는 프로세스를 주기적으로 관찰하려면, 다음과 같이 -M 옵션을 사용할 수 있다.
# psinfo -M wcpu=70,hs=40 60
Date.time PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
0421.09:54:20 1652 1646 guest 28.93M 22.04M 13.71M S 1 72.35% 72.35% 18.0% 0d520 01:50.0230 a.out
0421.09:55:20 1652 1646 guest 28.93M 22.04M 13.71M S 1 74.05% 74.05% 18.0% 0d580 02:30.2395 a.out
0421.09:56:20 1652 1646 guest 28.93M 22.04M 13.71M S 1 73.35% 73.35% 18.0% 0d640 03:10.1359 a.out
... skip ...
|
위의 명령어는 60초 간격으로 WCPU 사용률이 70% 이상이거나
HP+STK(heap+stack)의 크기가 40MB 이상인 프로세스를 화면에 출력한다.
이 명령어와 cron을 이용하면, 매일 CPU 사용률이 일정 수준 이상이거나 HP+STK가 일정 수준
이상인 프로세스를 날짜 별로 특정 디렉토리에 저장할 수 있다.
parm에는 psinfo -M 명령어를 이용하여 프로세스 정보를 주기적으로 수집할 수 있게 하는
psinfo_dailymon이라는 쉘 스크립트가 있다.
먼저 /PSLOG 라는 디렉토리를 만들고 다음과 같은 라인을 cron table에 등록한다.
0 0 * * * /opt/JSparm/bin/psinfo_dailymon /PSLOG wcpu=70,hs=40 60 1440
|
위의 /opt/JSparm/bin/psinfo_dailymon /PSLOG wcpu=70,hs=40 60 1440 명령어는 cron에 의해 매일 0 시에
실행된다.
이 명령어는 프로세스 정보를 60초 간격으로 1440번(60 *24 = 1440: 1 day) 조사하여 CPU 사용률이
70% 이상이거나 HP+STK(heap+stack)의 크기가 40MB 이상인 프로세스 정보를
/PSLOG/psinfo.dd (dd는 day(01-31)) 파일에 저장한다.
* * * * * /opt/JSparm/bin/psinfo_dailymon /PSLOG wcpu=70,hs=40
|
위의 /opt/JSparm/bin/psinfo_dailymon /PSLOG wcpu=70,hs=40는 매분 cron에 의해 실행된다.
여기서 psinfo_dailymon은 한번만 데이타를 수집한다.
위의 두개의 cron entry중 필요한 것을 선택하여 지정하면 된다.
여기서 wcpu를 사용한 것에 유의하십시오.
특정 이름의 프로세스만 보고 싶으면, -G 옵션을 사용하여 프로세스명을 지정할 수 있다.
여러 개를 지정할 경우에는 콤마로 분리하여 지정한다.
콤마 차체를 명령어 이름으로 사용하려면, 콤마 앞에 백슬래쉬를 붙이면 된다.
첫번째 글자가 느낌표(!)이면, 지정한 명령어 이름과 일치하지 않는 프로세스 정보만 보여준다.
# psinfo -G ksh
PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
1725 1722 guest 1.969M 1.531M 0.047M S 1 0.00% 0.00% 1.3% 0d23798 00.1995 /bin/ksh
460 456 guest 1.953M 1.383M 0.047M S 1 0.00% 0.00% 1.1% 0d36693 01.1701 /bin/ksh
468 461 guest 1.969M 1.430M 0.047M S 1 0.00% 0.00% 1.2% 0d36692 00.4239 /bin/ksh -o vi
471 462 guest 1.953M 1.336M 0.047M S 1 0.00% 0.00% 1.1% 0d36692 01.2345 /bin/ksh
# psinfo -G ksh -s
PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
1725 1722 guest 1.969M 1.531M 0.047M S 1 0.00% 0.00% 1.3% 0d23798 00.1909 /bin/ksh
468 461 guest 1.969M 1.430M 0.047M S 1 0.00% 0.00% 1.2% 0d36692 00.4223 /bin/ksh -o vi
460 456 guest 1.953M 1.383M 0.047M S 1 0.00% 0.00% 1.1% 0d36693 01.1407 /bin/ksh
471 462 guest 1.953M 1.336M 0.047M S 1 0.00% 0.00% 1.1% 0d36692 01.2331 /bin/ksh
|
정렬 순서를 지정하는 옵션(-c,-m,-h,-r,-s,-e,-l,-T,-C)을 지정하지 않으면, 특별한 순서없이
-G 옵션에 지정된 이름과 같은 명령어를 모두 보여준다.
정렬옵션을 지정하면, 지정된 정렬순서로
디폴트로 상위 20개의 프로세스 정보만 보여준다. 이 개수는 -t 옵션으로 변경할 수 있다.
-g 옵션에 CMDLINE에 있는 임의의 문자열을 지정하여 일치되는 프로세스 정보를 볼 수도 있다.
여러 개를 지정할 경우에는 콤마로 분리하여 지정한다.
콤마 차체를 문자열로 사용하려면, 콤마 앞에 백슬래쉬를 붙이면 된다.
첫번째 글자가 느낌표(!)이면, 지정한 문자열을 포함하지 않는 프로세스 정보만 보여준다.
# psinfo -g vi
PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
1145 440 guest 1.914M 1.352M 0.027M S 1 0.00% 0.00% 1.1% 0d917 00.8612 vi readme
1159 428 guest 1.664M 1.273M 0.047M R 1 0.08% 0.08% 1.0% 0d49 00.2692 /bin/ksh -o vi
1162 1159 guest 1.086M 0.930M 0.070M O 1 0.19% 0.19% 0.8% 0d0 00.0822 psinfo -g vi
1157 434 guest 1.914M 1.469M 0.027M S 1 0.01% 0.01% 1.2% 0d462 00.9607 vi /etc/termcap
|
-S 옵션을 사용하면, 시스템에서 같은 이름을 가진 프로세스들을 하나로
그룹핑하여 각 프로세스에 대하여 다음과 같은 내용을 보여준다.
# psinfo -S
Date.time 1016.23:37:09 proc 65 zomb 0 run 0 lwp 144 cpu 1.63% load1m 0.03 ptime 12450.6689 hp+stk 40.93M
COMMAND NPROC NLWP WCPU% CPU% HP+STK MAX_SIZE MAX_RSS MAX_HS ELAPSED TIME CHILDTIME
java 2 33 0.42% 0.42% 37.99M 174.0M 63.08M 32.32M 0d18435 01:31.7445 03.3300
fsflush 1 1 0.20% 0.20% 0.008M 0.000M 0.000M 0.008M 0d19186 16.1461 00.0000
gnome-netstatus 1 1 0.15% 0.15% 3.312M 69.81M 8.402M 3.312M 0d18446 27.4741 00.0000
sh 1 1 0.07% 0.07% 0.012M 3.105M 1.105M 0.012M 0d19 00.0364 00.0000
Xorg 1 1 0.05% 0.05% 20.67M 54.48M 11.67M 20.67M 0d19157 10.8972 00.3000
gnome-terminal 1 2 0.05% 0.05% 6.523M 153.6M 10.73M 6.523M 0d18442 10.0028 00.0000
mixer_applet2 1 1 0.04% 0.04% 0.523M 67.03M 7.238M 0.523M 0d18445 07.3121 00.0000
psinfo 1 1 0.04% 0.04% 0.453M 2.230M 1.320M 0.453M 0d0 00.0078 00.0000
gnome-panel 1 1 0.01% 0.01% 15.32M 135.6M 11.21M 15.32M 0d18450 03.6375 00.0000
composite_aux_g 1 1 0.01% 0.01% 3.785M 117.6M 7.465M 3.785M 0d18454 02.6747 00.0000
ksh 6 6 0.01% 0.01% 0.270M 3.500M 1.289M 0.047M 0d9967 02.4933 07:18.6700
vi 2 2 0.01% 0.01% 0.062M 4.133M 1.680M 0.031M 0d459 00.3021 00.0000
mmonx 1 1 0.01% 0.01% 0.594M 3.566M 0.977M 0.594M 0d19160 01.6248 00.0000
devfsadm 1 7 0.00% 0.00% 0.309M 5.188M 1.035M 0.309M 0d19159 00.7336 00.0000
nscd 1 30 0.00% 0.00% 1.711M 6.945M 2.168M 1.711M 0d19173 01.2140 00.0000
iiimx 1 1 0.00% 0.00% 0.105M 3.777M 0.992M 0.105M 0d18464 00.0139 00.2300
kcfd 1 3 0.00% 0.00% 0.367M 4.211M 1.691M 0.367M 0d19174 00.1758 00.0000
Xsession 1 1 0.00% 0.00% 0.070M 3.242M 0.695M 0.070M 0d18465 00.0735 00.1600
sendmail 2 2 0.00% 0.00% 1.016M 9.137M 1.453M 0.508M 0d19101 00.7930 00.1100
iiim-xbe 1 3 0.00% 0.00% 0.312M 8.953M 1.703M 0.312M 0d18458 00.0579 00.0000
|
-U 옵션을 사용하면, 같은 사용자명을 가진 프로세스들을 하나로
그룹핑하여 각 사용자에 대하여 다음과 같은 내용을 보여준다.
# psinfo -U
Date.time 1017.00:24:21 proc 65 zomb 0 run 0 lwp 144 cpu 1.69% load1m 0.08 ptime 12680.2382 hp+stk 41.00M
USERNAME NPROC NLWP WCPU% CPU% HP+STK MAX_SIZE MAX_RSS MAX_HS ELAPSED TIME CHILDTIME
guest 41 67 0.63% 0.63% 125.9M 174.0M 15.37M 24.46M 0d511 02:02.7105 07:22.7400
root 40 169 0.36% 0.36% 29.78M 14.96M 2.555M 7.895M 0d0 01:14.2755 04.9100
noaccess 1 18 0.14% 0.14% 32.32M 128.3M 63.19M 32.32M 0d19200 44.8103 00.0000
daemon 2 4 0.00% 0.00% 0.855M 4.211M 1.691M 0.488M 0d19216 00.1785 00.0000
smmsp 1 1 0.00% 0.00% 0.508M 9.137M 0.695M 0.508M 0d19153 00.0970 00.0400
|
-o 옵션을 사용하면, 현재 CPU를 사용하고 있는 프로세스와 CPU를 사용하기
위해 Run Queue에 대기하고 있는 프로세스 정보를 보여준다.
# psinfo -o
PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
439 436 guest 42.19M 24.28M 20.03M R 1 0.10% 0.10% 20.4% 0d14102 03:14.4040 netscape
628 417 guest 1.516M 1.156M 0.055M R 1 7.01% 7.01% 1.0% 0d171 12.1341 find / -print
747 743 root 1.305M 1.031M 0.109M O 1 0.24% 0.24% 0.9% 0d0 00.0539 psinfo -o
746 436 guest 1.023M 0.828M 0.039M R 1 1.26% 1.26% 0.7% 0d2 00.2745 grep open test.txt
|
S 컬럼에 O는 CPU를 사용하고 있는 프로세스이고,
R은 Run Queue에 대기하고 있는 프로세스를 나타낸다.
-x 옵션을 사용하면, real user ID가 effective user ID와 다른 프로세스 정보를 보여준다.
# psinfo -x
PID PPID USERNAME REALUSER SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
1199 1196 root guest 1.828M 1.336M 0.055M S 1 0.04% 0.04% 1.1% 0d139 00.0712 /usr/bin/ksh
1210 1203 root guest 2.102M 1.570M 0.094M S 1 0.16% 0.16% 1.3% 0d12 00.0656 passwd
|
real user ID와 effective user ID가 다르고, real user ID가 일반 사용자인 것은 setuid bit가
설정된 프로그램이다. 이 프로그램이 passwd와 같이 시스템에서 기본적으로 설정되어 있는 프로그램이
아니라면, 누군가 해킹을 위해 만들어 놓은 back door 프로그램일 확률이 매우 높다.
이 경우에 이 프로세스를 어떻게 실행했는지 REALUSER(guest)에게 확인하여야 한다.
-Z 옵션을 사용하면, zone 정보도 함께 보여준다.
# psinfo -Z
Date.time 0122.13:24:29 proc 68 zomb 1 run 0 lwp 215 cpu 1.84% load1m 0.05 ptime 382.5742 hp+stk 80.63M
ZONE PID PPID USERNAME SIZE RSS HP+STK S NLWP WCPU% CPU% MEM% ELAPSED TIME CMDLINE
global 3837 3835 root 2.375M 1.445M 0.309M O 1 0.56% 0.56% 0.1% 0d0 00.1198 /opt/parm/bin/psinfo -Z
global 3835 3829 root 1.582M 0.953M 0.039M S 1 0.34% 0.34% 0.1% 0d24 00.2201 ksh
global 387 1 root 4.207M 1.777M 0.402M S 14 0.14% 0.14% 0.1% 0d3260 00.1318 /usr/sbin/syslogd
global 3829 3826 guest 1.582M 0.969M 0.039M S 1 0.11% 0.11% 0.1% 0d31 00.1216 -ksh
global 3826 349 root 3.668M 1.941M 0.043M S 1 0.09% 0.09% 0.2% 0d32 00.0990 /usr/sbin/in.telnetd
global 349 1 root 6.109M 2.773M 1.656M S 4 0.08% 0.08% 0.2% 0d3260 00.8570 /usr/lib/inet/inetd start
global 3 0 root 0.000M 0.000M 0.008M S 1 0.07% 0.07% 0.0% 0d3299 02.3269 fsflush
global 146 1 daemon 4.578M 2.328M 0.648M S 4 0.05% 0.05% 0.2% 0d3286 00.6569 /usr/lib/crypto/kcfd
.... skip ...
|
특정 zone에 있는 프로세스 정보를 보고 싶을 경우에 -z 옵션에 zone 이름이나 zone ID를 지정하면 된다.
-S 옵션과 -Z 옵션을 함께 사용하면, zone 별로 그룹핑하여 프로세스 정보를 보여준다.
# psinfo -S -Z
Date.time 0122.13:58:06 proc 100 zomb 1 run 1 lwp 349 cpu 0.82% load1m 0.04 ptime 521.0635 hp+stk 0.789M
COMMAND NPROC NLWP WCPU% CPU% HP+STK MAX_SIZE MAX_RSS MAX_HS ELAPSED TIME CHILDTIME
global 68 221 0.69% 0.69% 0.789M 129.4M 109.4M 0.469M 0d0 01:18.4319 05:44.0800
zone1 32 128 0.13% 0.13% 0.000M 128.7M 84.16M 0.000M 0d932 01:01.1716 37.3800
|
다음은 상태표시 라인에 대한 설명이다.
psinfo 명령어의 첫번째 라인에는 다음과 같은 형식의 정보가 출력된다.
Date.time 1016.23:37:09 proc 65 zomb 0 run 0 lwp 144 cpu 1.63% load1m 0.03 ptime 12450.6689 hp+stk 40.93M
상태표시 | 설명 |
Date.time 1016.23:37:09 | Date.time의 형식은 다음과 같다.
mmdd.HHMMSS
psinfo를 실행한 시간. 10월 16일 23시 37분 09초 |
proc 65 | 전체 프로세스 개수(65) |
zomb 0 | 좀비(zombie) 프로세스 개수(0) |
run 0 | runnabe 프로세스 개수(0) |
lwp 144 | 전체의 프로세스의 LWP 개수(144) |
cpu 1.63% | 전체의 프로세스의 CPU 사용률 합계(1.63%) |
load1m 0.03 | 지난 1분간 run queue에서 대기한 1초당 쓰레드의 개수이다. |
ptime 12450.6689 | 전체의 프로세스가 CPU를 사용한 누적시간의 합계(TIME+CHILDTIME)
(단위: second.nnnn (nnnn은 1/10000초)
psinfo 명령어가 시스템 전체 lock을 걸고 모든 프로세스 정보를 수집하고 난 뒤에 lock을
푸는 것이 아니기 때문에, 1) 부모 프로세스 정보를 수집한 후에 그 자식 프로세스 정보를 수집하기 전에
그 자식 프로세스가 종료되거나, 2) 자식 프로세스 정보를 수집한 후 그 부모 프로세스 정보를
수집하기 전에 자식 프로세스가 종료될 경우에 오차가 발생할 수 있다.
|
hp+stk 40.93M | 전체의 프로세스의 heap과 stack의 합계 (MB 단위) |
psinfo 명령어의 각 컬럼에 대한 의미는 다음과 같다.
필드 | 설명 |
DATE.TIME |
psinfo 명령어를 실행한 시간을 다음과 같은 형식으로 표시한다.
mmdd.HH:MM.SS
이 컬럼은 -0 옵션을 사용할 경우에 출력된다.
|
ZONE | 프로세스가 실행되고 있는 zone을 표시 (-Z 옵션 사용시에 표시됨) |
PID | 프로세스 ID |
PPID | 부모 프로세스 ID |
USERNAME | 유효 사용자명(effective user name) |
REALNAME | 실제 사용자명(real user name) -x 옵션 또는 -R 옵션 사용시에 이 컬럼이 출력된다. |
SIZE | 프로세스가 차지하는 메모리 크기 |
RSS | 프로세스가 차지하는 메모리 중 물리적 메모리에 적재된 크기 |
HP+STK | 프로세스의 heap과 stack 크기의 합계
여기서 heap은 프로세스가 다이나믹하게 메모리를 할당한 것은 말한다.
(주로 malloc()함수에 의해 요청된 크기) |
S | 프로세스의 상태(state)를 표시한다.
S Sleeping process
O process On processor
R Runnable process
Z Zombie state
T process stopped ether by a job control signal or because of
being Traced.
|
NLWP | 프로세스에 있는 LWP(light-weight process)의 개수 |
CPU% WCPU% | CPU%는 CPU 사용량의 백분률
WCPU%(weighted CPU%) = CPU% * processor 개수
WCPU%란 각 프로세스가 사용한 CPU 사용률을 CPU가 1 개인 시스템에 비례한
사용률을 말한다. 예를 들면, CPU가 4개인 시스템에서 CPU%가 20%이면
WCPU%는 80%(20*4)가 된다.
|
MEM% | 물리적 메모리에 적재된 메모리 사용량의 백분률 |
MAX_SIZE |
프로세스 중에서 SIZE 가 제일 큰 프로세스의 SIZE를 보여준다.
이 컬럼은 -S 또는 -U 옵션을 지정할 때, 표시된다.
|
MAX_RSS |
프로세스 중에서 RSS 가 제일 큰 프로세스의 RSS를 보여준다.
이 컬럼은 -S 또는 -U 옵션을 지정할 때, 표시된다.
|
MAX_HS |
프로세스 중에서 HP+STK 가 제일 큰 프로세스의 HP+STK를 보여준다.
이 컬럼은 -S 또는 -U 옵션을 지정할 때, 표시된다.
|
ELAPSED | 프로세스가 시작한 후에 경과된 시간(second)
형식: day d second
1d12419: 1일 12419초가 경과함
-. 옵션을 지정하면
hour . second 형식으로 표시한다.
1.0029 이면, 1 시간 29초가 경과함.
|
TIME | 프로세스가 지금까지 사용한 CPU 사용량
형식: [[[day-[[HH:]MM:]]SS.nnnn (nnnn은 1/10000초)
|
CHILDTIME |
-E 옵션 사용시에 이 컬럼이 출력된다.
자식 프로세스가 사용한 CPU사용량이며, 자식 프로세스가 종료될 때, 부모 프로세스에게 반영된다.
형식: [[[day-[[HH:]MM:]]SS.nnnn (nnnn은 1/10000초)
|
CMDLINE | 명령어 및 인수 |
CMD | 명령어 패스의 마지막 파일명
예를 들어 명령어가 /usr/openwin/bin/htt -nosm 경우에 htt을 나타낸다.
/usr/openwin/bin/htt -nosm ---> htt
이 컬럼은 -f 옵션을 사용할 경우에 출력된다.
|
다음은 psinfo의 각 옵션에 대하여 설명한다.
옵션 | 설명 |
-. |
-. 옵션을 지정하면, ELAPSED 시간표시를 hour.second 형식으로 보여준다.
|
-0 |
-0 옵션을 지정하면, 다음과 같이 첫컬럼에 날짜와 시간 정보를 출력하게 한다.
# psinfo -0 -t5 -f
Date.time 0209.12:42:49 proc 84 zomb 0 run 0 lwp 261 cpu 1.51% load1m 0.04 ptime 286.7851 hp+stk 186.7M
DATE.TIME PID USERNAME HP+STK S NLWP WCPU% CPU% ELAPSED TIME CMD
0409.12:42:49 881 guest 5.641M S 15 0.21% 0.21% 0d2483 06.5135 java
0409.12:42:49 131 daemon 0.648M S 4 0.18% 0.18% 0d2856 00.1505 kcfd
0409.12:42:49 705 noaccess 30.13M S 18 0.18% 0.18% 0d2828 13.4921 java
0409.12:42:49 856 guest 3.312M S 1 0.15% 0.15% 0d2494 03.5246 gnome-netstatus
0409.12:42:49 347 root 1.656M S 4 0.12% 0.12% 0d2845 00.4875 inetd
|
|
-6 |
-6 옵션을 지정하면, 64 bit 프로세스 정보만 보여준다.
|
-a |
-a 옵션을 사용하면 프로세스 전체를 보여주며, 출력되는 프로세스의
순서는 없으며, Date.time 라인 정보는 맨 끝에 출력된다.
| -A |
-A 옵션을 사용하면 프로세스 전체에 대해 좀 더 자세한 정보로 보여준다.
첫번째 라인에는 다음과 같은 정보가 추가된다.
PSINFO-A: INTERVAL 60 CPU 1
출력되는 정보에는 순서가 없으며, SIZE, RSS, HP+STK에 대하여 KB 단위로 보여주고, TIME과 CHILDTIME에
대하여 소수점 이하 두자리 숫자를 항상 보여준다.
또한 명령어라인(CMDLINE)에 개행문자(NEWLINE)가 있을 경우, 이 문자는 +(plus) 기호로 바꾼다.
Date.time 라인 정보는 맨 끝에 출력된다.
이 옵션을 사용한 psinfo 명령어의 결과를 파일로 저장한 후에 psparse 명령어를 사용하여
데이타를 다양한 형태로 가공하여 볼 수 있다.
또한 수집한 데이타에 대해서는 gpsinfo 명령어를 사용하여,
프로세스 정보에 대한 그래프를 만들 수 있다.
| -c |
-c 옵션은 CPU 사용률이 큰 순서로 -t 옵션에 지정한 개수 만큼 출력한다(디폴트 옵션이다).
| -C |
-C 옵션은 자식 프로세스의 누적 CPU 사용량이 큰 순서로 -t 옵션에 지정한 개수 만큼 출력한다. -E 옵션을 지정하지 않아도 CHILDTIME을 보여준다.
|
-d delimiter |
-d delimiter 옵션은 -I 옵션과 함께 사용되며, PID 분리자를 지정한다.
|
-e |
-e 옵션은 최근에 실행된 프로세스 순서로 -t 옵션에 지정한 개수 만큼 출력한다.
| -E |
-E 옵션은 자식 프로세스(child process)의 CPU 누적 사용량을 보여준다.
자식 프로세스의 CPU 누적 사용량은 자식 프로세스가 종료될때 부모 프로세스에게 반환된다.
자식 프로세스가 또 자식 프로세스를 만든 경우에 손자 프로세스의 CPU 누적 사용량도 합산되어
부모 프로세스에게 반환된다.
| -f |
-f 옵션은 다음과 같은 정보만 화면에 보여준다.
PID USERNAME HP+STK S NLWP WCPU% CPU% ELAPSED TIME CMD
| -g [!]strings |
-g string 옵션을 사용하면, CMDLINE에 출력될 명령어(command)와 인수(arguments) 중에서 지정한
string과 같은 문자열이 포함된 프로세스의 정보를 모두 출력한다.
정렬 순서를 지정하는 옵션(-c,-m,-h,-r,-s,-e,-l,-T,-C)을 지정하지 않으면, 특별한 순서없이
-g 옵션에 지정된 이름을 포함하는 명령어를 모두 보여준다.
정렬옵션을 지정하면, 지정된 정렬순서로
디폴트로 상위 20개의 프로세스 정보만 보여준다. 이 개수는 -t 옵션으로 변경할 수 있다.
여러 개를 지정할 경우에는 콤마로 분리하여 지정한다.
콤마 차체를 문자열로 사용하려면, 콤마 앞에 백슬래쉬를 붙이면 된다.
첫번째 글자가 느낌표(!)이면, 지정한 문자열을 포함하지 않는 프로세스 정보만 보여준다.
|
-G [!]cmd_names |
-G cmd_name 옵션을 사용하면, 명령어 이름과 cmd_name과 일치하는 프로세스 정보를 출력한다.
명령어에 path가 붙어 있다면, cmd_name을 지정할 때, 반드시 path의 마지막 있는 파일명만 지정하여야 한다.
예제)
/usr/bin/ksh --> ksh
정렬 순서를 지정하는 옵션(-c,-m,-h,-r,-s,-e,-l,-T,-C)을 지정하지 않으면, 특별한 순서없이
-G 옵션에 지정된 이름과 같은 명령어를 모두 보여준다.
정렬옵션을 지정하면, 지정된 정렬순서로
디폴트로 상위 20개의 프로세스 정보만 보여준다. 이 개수는 -t 옵션으로 변경할 수 있다.
여러 개를 지정할 경우에는 콤마로 분리하여 지정한다.
콤마 차체를 명령어 이름으로 사용하려면, 콤마 앞에 백슬래쉬를 붙이면 된다.
첫번째 글자가 느낌표(!)이면, 지정한 명령어 이름과 일치하지 않는 프로세스 정보만 보여준다.
|
-h |
-h 옵션은 프로세스 메모리 중에 heap과 stack을 합친 값이 큰 순서로 -t 옵션에
지정한 개수 만큼 출력한다.
| -H |
-H 옵션은 개별 프로세스 정보를 보여주지 않고, 다음과 같은 전체 프로세스 정보만 보여준다.
Date.time proc zomb run lwp cpu load1m ptime hp+stk time childtime
time는 전체 프로세스가 사용한 CPU 누적 사용량이고, childtime는 자식 프로세스들이 사용한 CPU 누적
사용량이다. 형식은 다음과 같다.
형식: [[[day-]HH:]MM:]SS.nnnn (nnnn은 1/10000초)
ptime은 time과 childtime의 합계이며 형식은 다음과 같다.
형식: second.nnnn (nnnn은 1/10000초)
| -I |
-I 옵션을 지정하면, 출력될 프로세스 정보에서 프로세스의 PID 만 공백으로 분리하여 출력한다.
# psinfo -I
771 3 7394 608 715 510 3829 166 149 524 661 0 1 2 387 7 9 300 351 307
|
-d delimiter 옵션을 사용하여 PID 분리자를 지정할 수 있다.
# psinfo -t5 -I -d,
771,3,608,7394,715
|
-I 옵션을 지정하면, psinfo 자신의 프로세스 PID는 출력하지 않는다.
|
-j |
-j 옵션은 CPU를 많이 사용하는 순서로 5개의 프로세스 정보와 HP+STK(heap+stack)이 큰 순으로 5개의 프로세스를 더 보여준다.
예를 들어 # psinfo -j 라고하면 CPU를 많이 사용하는 순으로 5개의 프로세스와 HP+STK(heap+stack)가 큰 순으로 5개의 프로세스를 추가적으로 보여준다.
-j 옵션을 사용하면 첫번째 라인에는 다음과 같은 정보가 추가된다.
PSINFO-j: INTERVAL 60 CPU 1
60은 psinfo -j가 데이타를 수집하는 시간 간격 60초를 나타내고 1은 한개의 CPU가 있다는 것을 나타낸다.
-t n 옵션으로 숫자를 지정하면 CPU를 많이 사용하는 프로세스 개수를 변경할 수 있다.
이 옵션은 getdata 명령어에서 프로세스 정보를 수집할 때, 사용된다.
-j 옵션을 사용하여 수집한 데이타에 대해서는 gpsinfo 명령어를 사용하여,
프로세스 정보에 대한 그래프를 만들 수 있다.
| -k |
-k 옵션을 지정하면, SIZE, RSS, HP+STK 컬럼의 값을 Kilobyte 단위로 표시한다.
| -l |
-l 옵션을 지정하면, LWP(light-weight process)를 많은 가지고 있는 프로세스 순서로 출력한다.
| -M condition |
-M condition 옵션은 프로세스를 조사하여 지정한 조건이 만족되는 프로세스 정보를 출력한다.
condition의 형식)
field=value[,field=value,...]
각 필드와 조건 및 단위는 아래에 열거되었고, 각각에 열거되는 조건은 OR 조건이다.
field | value |
size | >= SIZE (MB 단위) |
rss | >= RSS (MB 단위) |
hs | >= HP+STK (MB 단위) |
state | = one of S O R Z T |
nlwp | >= NLWP (number of LWP) |
wcpu | >= WCPU (%) |
wcpu1 | >= WCPU (%) and NLWP == 1
(해당 프로세스의 쓰레드 개수가 1 개이고, WCPU 값이 지정한 값 이상인 프로세스)
|
cpu | >= CPU (%) |
mem | >= MEM (%) |
elapsed | <= ELAPSED (second) |
time | >= TIME (second) |
childtime | >= CHILDTIME (second) |
예제)
psinfo -M wcpu=90,hs=10
WCPU 값이 90% 이상이거나 HP+STK 값이 10MB 이상인 프로세스 정보를 출력한다.
|
-m |
-m 옵션은 MEM%가 큰 순서로 -t 옵션에 지정한 개수 만큼 출력한다.
이것은 RSS가 큰 순서로 정렬한 것과 같다.
|
-n |
-n 옵션은 프로세스 개수가 많은 순서로 -t 옵션에 지정한 개수 만큼 출력한다.
이 옵션은 -S 옵션에서만 사용 가능하다.
|
-o |
-o 옵션은 실행되고 있는 프로세스 또는 run queue에 대기하고 있는 프로세스들을 모두 보여준다.
|
-p plist |
-p plist 옵션은 모니터할 특정 프로세스 ID를 지정한다. plist는 다음과 같다.
pid[,pid,pid...]
|
-P pid |
-P pid 옵션을 지정하면, 프로세스의 부모 프로세스의 PID가 pid와 같은 프로세스 정보를 모두 보여준다.
pid[,pid,pid...]
|
-r |
-r 옵션은 RSS가 큰 순서로 -t 옵션에 지정한 개수 만큼 출력한다.
| -R |
-R 옵션은 사용자명에 실제 사용자명(real user name)을 보여준다.
| -s |
-s 옵션은 SIZE가 큰 순서로 -t 옵션에 지정한 개수 만큼 출력한다.
| -S [-N cmd_names] -U [-N user_names] |
-S 옵션은 시스템에 실행되고 있는 프로세스들 중에 같은 이름을 가진 프로세스 별로 모아서
정리하여 보여주고,
-U 옵션은 시스템에 실행되고 있는 프로세스들 중에 같은 사용자를 이름을 가진 프로세스 별로
모아서 정리하여 보여준다.
정렬 순서를 지정하지 않으면, CPU를 많이 사용한 프로세스 순서로 -t 옵션에 지정한 개수 만큼 출력한다.
-U 또는 -S 옵션을 사용할 때, 다음과 같은 헤더가 출력된다.
COMMAND NPROC NLWP WCPU% CPU% HP+STK MAX_SIZE MAX_RSS MAX_HS ELAPSED TIME CHILDTIME
NPROC는 프로세스의 개수이다.
NPROC, NLWP, WCPU/CPU, TIME, HP+STK 필드에 출력되는 값은 해당되는 프로세스들의 합계이고,
MAX_SIZE는 프로세스중에서 SIZE가 가장 큰 값을 표시하고,
MAX_RSS는 프로세스중에서 RSS가 가장 큰 값을 표시하고,
MAX_HS는 프로세스중에서 HP+STK가 가장 큰 값을 표시한다.
ELAPSED는 프로세스를 실행한 뒤에 경과된 시간이며, 프로세스가 여러 개 있을 경우에는 최후에 실행된 프로세스에
대한 정보를 보여준다.
TIME은 현재 프로세스가 사용한 CPU 사용 누적 시간의 합계이고,
CHILDTIME는 자식 프로세스가 사용한 CPU 사용 누적 시간의 합계이다.
-S 옵션에 -N cmd_names을 지정하면, 지정한 프로세스명에 대한 정보만 보여준다.
cmd_names에 여러개의 명령어를 지정하려면, 다음과 같이 콤마로 분리하여 여러 개의 명령어를 지정할 수 있다.
# psinfo -S -N java,ksh,httpd
지정하려고 하는 명령어에 콤마가 들어 있으면, 백슬래쉬를 콤마 앞에 붙이면, 백슬래쉬 뒤에
콤마를 명령어의 일부로 인식합니다.
# psinfo -S -N "java,ksh,httpd,send\,a"
위의 명령어는 'java', 'ksh', 'httpd', 'send,a' 명령어들에 대하여 정보를 수집한다.
-U 옵션에 -N user_names을 지정하면, 지정한 사용자에 대한 정보만 보여준다.
|
-T |
-T 옵션은 TIME이 큰 순서로 -t 옵션에 지정한 개수 만큼 출력한다.
| -t n |
-t n 옵션을 사용할 경우 1 - 100 까지 지정할 수 있으며, 지정하지 않으면,
디폴트로 20이다.
|
-u [!]users |
프로세스중에 effective user ID가 지정한 사용자(user)와 같은 프로세스만 보여준다.
user는 사용자명 또는 사용자 ID number를 지정할 수 있다.
여러 개를 지정할 경우에는 콤마로 분리하여 지정한다.
첫번째 글자가 느낌표(!)이면, 지정한 사용자 이름과 일치하지 않는 프로세스 정보만 보여준다.
정렬 순서를 지정하는 옵션(-c,-m,-h,-r,-s,-e,-l,-T,-C)을 지정하지 않으면, 특별한 순서없이 -u 옵션에 사용자 이름과
같은 소유자인 명령어를 모두 보여준다.
정렬옵션을 지정하면, 지정된 정렬순서로 디폴트로 상위 20개의 프로세스 정보만 보여준다. 이 개수는 -t 옵션으로 변경할 수 있다.
| -V |
-V 옵션을 지정하면, 명령어의 버전 정보를 보여준다.
|
-x |
-a 옵션과 함께 사용하면,
effective user ID(USERNAME)와 real user ID(REALNAME)가 다른 프로세스를 모두 보여준다.
-a 옵션이 없으면 effective user ID(USERNAME)와 real user ID(REALNAME)가 다른 프로세스중에서
real user ID가 root가 아니고, 실행중인 명령어(psinfo)가 아닌 프로세스만 보여준다.
즉, -x 옵션만 사용하면 set-user-ID bit가 설정되어 실행되고 있는 프로세스를 찾을 수 있다.
|
-y |
-y 옵션을 지정하면, job control 이나 trace되는 이유로 중지된 프로세스 정보를 보여준다.
|
-Z |
-Z 옵션을 지정하면, 해당 프로세스가 실행되고 있는 Zone 이름도 보여준다.
|
-z zone |
-z 옵션에 zone 이름이나 zone ID를 지정하면, 해당 Zone에서 실행되고 있는 프로세스 정보만 보여준다.
|
filter_options |
filter_options 옵션에는 다음과 같다.
-g [!]strings | -G [!]cmd_names
-u [!]users
-g [!]strings | -G [!]cmd_names
|
-g 또는 -G 옵션에 일치하는 문자열을 가지고 있는 프로세스 정보에 대해서만 처리한다.
여러 개를 지정할 때에는 콤마로 구분한다.
string의 맨 첫글자에 ! 를 지정하면, 지정한 string과 일치하지 않은 프로세스 정보에 대해서만 처리한다.
-G httpd,java
-G !httpd,java
-g ora_
-g !ora
-g "java -server"
|
-u [!]users
|
-u 옵션에는 사용자 이름을 지정한다. 지정한 사용자 이름과 일치하는 프로세스 정보에 대해서만 처리한다.
여러 개를 지정할 때에는 콤마로 구분한다.
user 이름의 맨 첫글자에 ! 를 지정하면, 지정한 user 이름과 일치하지 않은 프로세스 정보에 대해서만 처리한다.
-u root
-u guest1,guest2
-u !root,nobody
|
|
interval [count] |
interval의 시간 간격으로 count 횟수 만큼 반복하여 프로세스 정보를 수집한다.
count를 지정하지 않으면, 지정한 시간 간격으로 무한히 반복한다.
interval과 count 둘 다 지정되지 않으면, 프로세스를 정보를
한번만 수집한다.
데이타를 수집할 때, 지정한 시간 간격으로 데이타를 수집한다.
그런데 지정한 시간 간격이 지나도 앞 시간대의 프로세스 정보를 모두 수집하지 못 했을 때
그 시간대의 데이타는 수집하지 않고 다음 데이타 수집 시간에 데이타를 수집한다.
|
|