[완료] 입출력 대기상태인 프로세스를 찾는법

visualplus의 이미지

안녕하세요. 지금 제 서버가 완전 맛이 갔습니다..
cpu사용율이 90~100%에서 내려오질 않네요.
그래서 top으로 봤더니 wa란게 60~70%가량 차지하길래 뭔지 찾아봤더니
입출력대기 상태라더군요..
입출력 대기상태인데 왜 cpu를 많이 먹는진 모르겠습니다만..
일단 이걸 해결해야할것 같아요

제 top화면입니다

top - 10:32:56 up  6:12,  1 user,  load average: 2.74, 3.07, 2.60
Tasks:  78 total,   1 running,  74 sleeping,   0 stopped,   3 zombie
Cpu(s):  3.5% us,  5.2% sy,  0.0% ni,  9.2% id, 82.0% wa,  0.2% hi,  0.0% si
Mem:    447832k total,   443320k used,     4512k free,   204812k buffers
Swap:  1004052k total,        0k used,  1004052k free,   128048k cached

이런식으로 wa가 엄청 많이 먹습니다.
그래서 어떤 프로세스가 wa상태인지 보려고 했는데..
ps aux에서도 안나오고.. top에서도 사용율만 나오고 vmstat에서도 사용율만 나오고.. 등..
아무리 검색하고 찾아봐도 wa상태인 프로세스를 찾는법을 찾지 못하겠네요..

어떻게 하면 이 프로세스를 찾을 수 있을까요?

bushi의 이미지

tick 핸들러에서 runqueue.nr_iowait 를 보고 cpustat.iowait 를 증가시킵니다.
즉,
I/O 요청이 치명적일 정도로 많거나
I/O 자체가 겁나게 느리거나
저 둘이 시너지 효과를 일으키고 있다거나,
등의 이유로 스케쥴러가 개고생하고 있는 것 같습니다.

ps 로 봐도 sleep 으로 잡힐 테니 언 놈이 삽질하고 있는 지 알기어렵겠고...

[bushi@rose ~]$ cat /proc/`/sbin/pidof firefox-bin`/io
rchar: 4060538579
wchar: 2079998193
syscr: 300358152
syscw: 2749890
read_bytes: 138158080
write_bytes: 158781440
cancelled_write_bytes: 52256768
[bushi@rose ~]$ 
[bushi@rose ~]$ cat /proc/`/sbin/pidof firefox-bin`/sched
firefox-bin (23775, #threads: 8)
---------------------------------------------------------
se.exec_start                      :     527680216.126995
se.vruntime                        :     190523095.806295
se.sum_exec_runtime                :     124852284.172308
se.avg_overlap                     :             0.032941
se.wait_start                      :             0.000000
se.sleep_start                     :     527680216.126995
se.block_start                     :             0.000000
se.sleep_max                       :          6708.376031
se.block_max                       :           618.014503
se.exec_max                        :           846.257141
se.slice_max                       :            59.996577
se.wait_max                        :           814.277567
se.wait_sum                        :       4181635.834716
se.wait_count                      :            159140101
sched_info.bkl_count               :                    0
se.nr_migrations                   :               640882
se.nr_migrations_cold              :                    0
se.nr_failed_migrations_affine     :                    0
se.nr_failed_migrations_running    :               354219
se.nr_failed_migrations_hot        :               811197
se.nr_forced_migrations            :                35675
se.nr_forced2_migrations           :               259124
se.nr_wakeups                      :            141182181
se.nr_wakeups_sync                 :            135869253
se.nr_wakeups_migrate              :               446809
se.nr_wakeups_local                :            139368713
se.nr_wakeups_remote               :              1813468
se.nr_wakeups_affine               :             62511268
se.nr_wakeups_affine_attempts      :             89133288
se.nr_wakeups_passive              :                    0
se.nr_wakeups_idle                 :                    0
avg_atom                           :             0.786153
avg_per_cpu                        :           194.813217
nr_switches                        :            158814109
nr_voluntary_switches              :            141104494
nr_involuntary_switches            :             17709615
se.load.weight                     :                 1024
policy                             :                    0
prio                               :                  120
clock-delta                        :                  109
[bushi@rose ~]$

이런게 있긴 한데 어떻게 써먹어야 하는진 문서를 봐야 알겠고...

OTL

visualplus의 이미지

일단 무한구글검색과 감으로 때려맞춰서 고치긴 했지만..
님이 알려주신 방법도 공부를 해봐야겠네요
감사합니다

eungkyu의 이미지

IO wait때문에 wa가 높은건 CPU가 고생하고 있다는 것이 아니고 IO가 고생하고 있다는 뜻입니다. =_=
다른 CPU먹는 프로세스가 뜨면 자연스럽게 wa가 줄고 us나 sy가 올라갑니다.

그리고 보통 컴퓨터가 버벅일땐 CPU보다는 IO쪽이 문제일 때가 많죠...

ps aux로 봤을 때 STAT이 D인게 보통 IO때문에 sleep하고 있는 거라고 man ps가 하는군요..

bushi의 이미지

D 는 uninterruptible sleep 상태입니다.
사용자 입장에선 ctrl+C 로 취소시키거나 kill 로 죽일 수 없다는 것 정도만 다르고,
그 외에는 sleep 과 동일합니다.

ps 로 봤을 때 D 로 표시된 게 보일 정도면 막장입니다.
개인적으론, 튜닝이 아니라 디버깅이 필요한 상황이라 생각합니다.

OTL

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.