# 명령어 비교
항목 | IBM (AIX) | Sun | HP/UX |
CPU 정보 | sar -P ALL 1 | psrinfo -v | glance |
CPU 사용량 | topas | top | top, glance |
메모리 정보 | topas | prtinfo | dmesg |
프로세스 메모리 | ps aux | ps -elf, ps -aux | ps -elf |
시스템 메모리 | vmstat | prtmem, vmstat | vmstat |
로그 | /var/adm/syslog | /var/adm/messages | /var/adm/syslog/syslog.log |
OS | uname -a | uname -a | uname -a |
패치 | lslpp -L | grep motif | showrev -a | swlist |
I/O | iostat 3 1 | iostat 3 1 | iostat 3 1 |
# 커널 확인 방법
리눅스에서 커널 처리비트를 확인한 결과이다.
# getconf WORD_BIT 32
# topas
# top
시스템의 상태를 볼 수 있는 명령어이다.
PRI 필드는 프로세스가 OS 프로세스 스케쥴러에서 갖는 우선순위이다. 우선순위가 높으면 낮은 것보다 우선적으로 실행된다. NICE는 프로세스의 nice 값으로 음수인 경우 우선순위를 갖는다.
일반적으로 I/O 위주의 작업은 우선순위를 변경해도 크게 달라지는 것이 없다. 보통 I/O를 대기하느라 많은 시간을 소비하는 프로세스는 이에 대한 보상으로 시스템 자체에서 우선순위를 높여주기 때문이다. 하지만 CPU 위주의 프로세스, 예를 들어 복잡한 계산을 하는 프로그램 등의 우선순위를 낮추면 영향은 많다, 예를 들어 이 경우 키보드 입력 반응 속도를 높일 수 있기도 하다.
- 프로세스 전체 명령행을 확인하고자 한다면 top -c로 실행한다.
- top -b로 실행하면 화면 갱신 없이 단 1회만 결과를 출력하므로 모니터링을 위하여 주기적으로 top의 결과를 텍스트로 받아 저장해야 할 경우에 유용하다.
# svmon
# CPU 확인
리눅스에서 CPU를 확인한 결과이다.
# cat /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 21 model : 2 model name : AMD Opteron(tm) Processor 6380 stepping : 0 cpu MHz : 2500.028 cache size : 512 KB fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb lm up rep_good extd_apicid unfair_spinlock pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 popcnt aes xsave avx f16c hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw xop fma4 tbm npt nrip_save bmi1 bogomips : 5000.05 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management:
# vmstat
1) 설명
vmstat은 CPU, 메모리 등 주요 시스템 자원을 모니터링할 수 있는 명령어이다. 일반적으로 “vmstat 3 5”와 같은 방식을 많이 사용한다. (3초 간격으로 모니터링 정보를 5개 출력을 의미함) 단, 명령어 결과 중 첫번째 줄은 부팅 이후 각 통계치에 대한 평균값을 보여주므로 무시해야 한다.
2) AIX 서버에서의 vmstat
- 명령어 : $ vmstat -v | tail -5
- pbuf가 부족할 경우
- Pending Disk I/O가 Block되므로, 이 경우 ioo 명령어로 pv_min_pbuf를 증가시켜야 함 - psbuf가 부족할 경우
- Paging Space I/O가 Block되므로, 이 경우 Paging을 중지시키고 Paging Space를 늘려야 함 - fsbuf가 부족할 경우
- JFS File System I/O가 Block되므로, 이 경우 ioo 명령어로 numfsbufs를 증가시켜야 함 (numfsbufs는 Default가 196이나 568 이상을 권장함) - fsbuf가 부족할 경우
- NFS나 vxfs의 Client File System의 I/O 또한 Block되므로, 이 경우 nfs_v3_pdts와 nfs_v3_vm_bufs를 늘려야 함 - fsbuf가 부족할 경우
- NFS2의 External Pager File System의 I/O 또한 Block되므로, 이 경우 j2_nbufPerPageDevice를 2048 이상(Default 512), j2_dynamicBufferPreallocation을 ioo 명령어로 늘려야 함
# iostat
각 디스크의 부하 등을 모니터링 할 때 사용하는 명령어이다. vmstat의 경우처럼 옵션간격과 수행횟수가 인자로 들어간다.
# ps
RSS 필드는 물리적 메모리 사용량이며, SZ는 가상 메모리를 포함한 량이다. 단위는 KB(Kilo Bytes)이다.
- ps -elf 명령을 사용할 수도 있다. 메모리와 관련이 있는 필드는 SZ인데 가상 메모리를 포함한 량을 나타내며, 단위는 페이지 수로 앞서 언급한 바와 같이 pagesize 명령어로 확인이 필요하다.
- 리눅스에서 pe -eLF 명령을 사용하면 CPU를 많이 사용하는 스레드를 식별할 수 있다.
- LWP 행 : 스레드 ID
- C 행 : CPU 사용률
- NLWP 행 : 프로세스 스레드 수
# truss
프로세스가 어떠한 일을 하는지 모니터링 할 수 있다. truss -p 프로세스번호 로 실행한다.
# strace
truss의 리눅스 버전이다.
hostname 명령어를 실행하면서 확인해보겠다. strace hostname 과 같이 실행하면 된다.
execve("/bin/hostname", ["hostname"], [/* 20 vars */]) = 0
결과의 처음에 나타나는 execve는 새로운 프로세스를 생성하고 커맨드를 실행하는 System call이다. 아무튼 환경에 따라 다르겠지만 -o 옵션으로 생성한 System Call output 파일의 크기는 3,853바이트이다.
그러면 이번에는 hostname -f 옵션으로 실행해보았다. -f 옵션은 다음과 같은 의미를 지닌다.
Display the FQDN (Fully Qualified Domain Name). A FQDN consists of a short host name and the DNS domain name. Unless you are using bind or NIS for host lookups you can change the FQDN and the DNS domain name (which is part of the FQDN) in the /etc/hosts file. See the warnings in section THE FQDN above, and avoid using this option; use hostname --all-fqdns instead.
아무튼 그랬더니 그 결과는 8,821바이트였다. 훨씬 더 많은 일을 하는 것을 알 수 있다.
앞서 아무런 옵션을 사용하지 않은 hostname의 strace 결과와 비교해보니 끝부분부터 새로운 내용들이 추가되고 있었다.
getpid() = 13064 open("/etc/resolv.conf", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=76, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f34c91ca000 read(3, "; generated by /sbin/dhclient-sc"..., 4096) = 76 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f34c91ca000, 4096) = 0 socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3 connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory) close(3) = 0 socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3 connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory) close(3) = 0 open("/etc/nsswitch.conf", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=1688, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f34c91ca000 read(3, "#\n# /etc/nsswitch.conf\n#\n# An ex"..., 4096) = 1688 read(3, "", 4096) = 0 close(3) = 0
FQDN을 획득하기 위한 작업들이 이루어짐을 알 수 있다. 단순 hostname과 달리 /etc/resolv.conf에 접근하는 것도 확인할 수 있다.
# 위와 같은 유닉스 메모리 모니터링시 주의사항
'■ LINUX' 카테고리의 다른 글
리눅스 현재시간과 현재날짜 확인 명령어 (0) | 2018.09.16 |
---|---|
리눅스 vi 명령어 모음과 꿀팁 (여러 파일 수정하기, 여러 파일 문자열 찾기) (0) | 2018.09.15 |
리눅스 타임아웃 설정 막는 명령어 TMOUT (0) | 2018.09.10 |
Linux passwd / 비밀번호 변경 명령어 (0) | 2017.05.30 |
리눅스 파일권한 명령어 (chmod, chown, umask) (0) | 2016.03.20 |