리눅스 I/O 트러블 슈팅
리눅스 I/O 트러블 슈팅

리눅스 I/O 트러블 슈팅

Tags
Linux
TroubleShooting
작성일
2024년 04월 03일 00시 00분
Author
URL
1. wa 값으로 부하 간단 확인 2. sysstat 으로 Disk's Queue / Read, Write Check 3. iotop 으로 Trouble Process Check (a large amount read/write traffic process ) 4. lsof 로 File check in use process 5. if not nessacery file (or process), kill them
wa 값으로 부하 확인
  • "wa" : I/O 처리가 완료될 때까지 CPU가 대기한 시간입니다.
이 값이 (1/CPU core count) * 100 넘는다면 병목이 발생하고 있다고 볼 수 있다.
$ top top - 18:46:00 up 1 day, 19:33, 2 users, load average: 0.09, 0.12, 0.17 Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.6 us, 1.6 sy, 0.0 ni, 95.3 id, 0.0 wa, 0.0 hi, 1.6 si, 0.0 st KiB Mem : 7864916 total, 6832200 free, 144640 used, 888076 buff/cache KiB Swap: 8126460 total, 8126460 free, 0 used. 7385944 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1256 root 20 0 93012 2388 208 S 6.2 0.0 180:37.82 cngddqarmh 13656 root 20 0 1388 900 184 S 6.2 0.0 0:00.01 ltvhilf 13670 root 20 0 1388 900 184 S 6.2 0.0 0:00.01 vrzoojy 1 root 20 0 126328 4740 2596 S 0.0 0.1 4:36.68 systemd
iostat 부하 확인
💡
옵션 -x : see detail -k : see kilobyte -z : except idel disk -t : see timestamp -p ALL : see all partition -3 : interval seconds
 
  • rrqm/s, wrqm/s : 초당 대기열의 읽기/쓰기 요청 수입니다.
  • %utilzed: I/O 요청이 장치에 발행된 CPU 시간의 백분율(장치의 대역폭 사용률). 이 값이 100%에 가까울 때 장치 포화가 발생합니다.
  • 위 utilzed 값이 100%에 가까울수록 안좋음.
$ iostat -xkzt -p ALL 3 12/28/2021 01:07:38 PM avg-cpu: %user %nice %system %iowait %steal %idle 15.43 0.00 2.16 61.34 0.00 21.07 Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util sda 50.33 3814.67 15.33 23.35 93.67 75.79 272.33 48892.00 240.33 46.88 26.50 179.53 0.00 0.00 0.00 0.00 0.00 0.00 11.43 93.60 sda3 50.33 3814.67 15.33 23.35 93.67 75.79 272.33 48892.00 240.33 46.88 26.50 179.53 0.00 0.00 0.00 0.00 0.00 0.00 11.43 93.60 dm-0 65.67 3813.33 0.00 0.00 128.73 58.07 336.00 51368.00 0.00 0.00 24.08 152.88 0.00 0.00 0.00 0.00 0.00 0.00 16.54 93.07
iotop 부하 확인
  • iotop 패키지가 설치되어 있어야 함
$ iotop Total DISK READ: 0.00 B/s | Total DISK WRITE: 1283.12 K/s Current DISK READ: 0.00 B/s | Current DISK WRITE: 2.60 M/s PID PRIO USER DISK READ DISK WRITE> SWAPIN IO COMMAND 47592 be/4 unet 0.00 B/s 436.33 K/s 0.00 % 0.00 % java -Xshare~Elasticsearch 47576 be/4 unet 0.00 B/s 318.01 K/s 0.00 % 0.00 % java -Xshare~Elasticsearch 47583 be/4 unet 0.00 B/s 310.61 K/s 0.00 % 0.00 % java -Xshare~Elasticsearch 1000 be/4 syslog 0.00 B/s 199.68 K/s 0.00 % 0.00 % rsyslogd -n -iNONE 350 be/3 root 0.00 B/s 7.40 K/s 0.00 % 0.35 % [jbd2/dm-0-8] 3543 be/4 unet 0.00 B/s 3.70 K/s 0.00 % 0.00 % java -Xms3g ~000 -u 1 -w 7 46342 be/4 www-data 0.00 B/s 3.70 K/s 0.00 % 0.00 % apache2 -k start 46349 be/4 www-data 0.00 B/s 3.70 K/s 0.00 % 0.00 % apache2 -k start
프로세스 상태 확인
💡
PROCESS STATE CODES D 무중단 절전 모드(일반적인 IO) R 실행 중 또는 실행 가능(실행 대기열에서) S 인터럽트 가능 절전(이벤트가 완료될 때까지 대기) T 작업 제어 신호에 의해 또는 추적 중이기 때문에 중지되었습니다. W 페이징(2.6.xx 커널 이후로는 유효하지 않음) X 죽은 프로세스 (절대 볼 수 없어) Z 소멸된("좀비") 프로세스, 종료되었지만 상위에 의해 거두지 않았습니다.
 
  • iotop으로 부하 상태인 프로세스 상태 확인
  • D가 빈번하게 발생한다면 io wait 발생하고 있다는 것이다.
$ ps -eo state,pid,cmd | grep 47592 S 47592 /usr/local/java/jdk_14/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -XX:+ShowCodeDetailsInExceptionMessages -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.locale.providers=SPI,COMPAT -Xms3g -Xmx3g -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -Djava.io.tmpdir=/tmp/elasticsearch-7443118090980044464 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=data -XX:ErrorFile=logs/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=7,filesize=64m -XX:MaxDirectMemorySize=1610612736 -Des.path.home=/home/unet/elastic-3 -Des.path.conf=/home/unet/elastic-3/config -Des.distribution.flavor=default -Des.distribution.type=tar -Des.bundled_jdk=true -cp /home/unet/elastic-3/lib/* org.elasticsearch.bootstrap.Elasticsearch
 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글

guest