ฉันมีสถิติไอโอสูง สูงเขียน แต่กำลังเขียนไฟล์อะไรอยู่


15
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.50    0.02    5.38    0.07    0.00   83.04

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdc               0.01    89.92    0.26   41.59     3.36   457.19    22.01     0.23    5.60   0.09   0.38
sdb               0.10    15.59    0.40   14.55     8.96   120.57    17.33     0.04    2.91   0.07   0.11
sda               0.13    45.37    0.96    8.09    20.06   213.56    51.63     0.02    2.64   0.16   0.14
sde               0.01    31.83    0.09   11.34     0.94   103.56    18.29     0.04    3.52   0.14   0.16
sdd               0.01    48.01    0.13   19.81     1.58   202.16    20.44     0.11    5.62   0.13   0.25

มีวิธีใดบ้างที่จะรู้ว่ากำลังเขียนไฟล์ใดอยู่? 457 kB / s

นอกจากนี้เครื่อง Linux อื่น ๆ นี้มีปัญหาเดียวกัน

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          20.50    0.00   46.48   20.74    0.00   12.28

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.17    11.61    0.99    3.51    36.65    59.43    42.70     0.10   23.20   3.84   1.73
sdb               0.55   224.18   24.30   97.45   246.48  1287.12    25.19     3.96   32.53   7.88  95.91
sdd               0.53   226.75   25.56   90.96   283.50  1271.69    26.69     3.43   29.44   8.22  95.75
sdc               0.00     1.76    0.28    0.06     4.73     7.26    70.41     0.00   12.00   2.12   0.07
dm-0              0.00     0.00    1.11   14.77    36.41    58.92    12.01     1.00   62.86   1.09   1.74
dm-1              0.00     0.00    0.04    0.12     0.17     0.49     8.00     0.00   21.79   2.47   0.04
dm-2              0.00     0.00    0.01    0.00     0.05     0.01     8.50     0.00    7.90   2.08   0.00

1200 เขียนคำขอต่อวินาทีสำหรับเซิร์ฟเวอร์ที่โฮสต์อะไร

คำตอบ:


8

คุณสามารถลองใช้คำสั่งต่อไปนี้ซึ่งใช้ได้กับฉันใน RHEL6:

1) ไม่ว่าอุปกรณ์ใดที่คุณเห็นในเอาต์พุต "iostat" ที่มี I / O มากขึ้นให้ใช้กับfuserคำสั่งดังนี้:

fuser -uvm device

2) คุณจะได้รับรายการของกระบวนการที่มีชื่อผู้ใช้ทำให้ I / O มากขึ้น เลือก PIDS เหล่านั้นและใช้ในlsofคำสั่งดังต่อไปนี้:

lsof -p PID | more

3) คุณจะได้รับรายการไฟล์ / ไดเรกทอรีพร้อมกับผู้ใช้ที่มีประสิทธิภาพ I / O สูงสุด


root @ host [~] # fuser -uv / home4 root @ host [~] # fuser -uvm / home4 ผู้ใช้ PID การเข้าถึงคำสั่ง / home4: newgames 18297 ..c (newgames) php cuntschi 18407 ..c .. ( cuntschi) php newgames 18457 ..c .. (newgames) php
user4951

5

ดูเหมือนว่าไม่มีเครื่องมือใด ๆ ที่จะค้นหาทรูพุตของ I / O ต่อไฟล์นอกเหนือจากกระบวนการที่ใช้ไฟล์ แต่มีวิธีหากระบวนการ I / O ปริมาณงาน

iotop - เป็นท็อป / iftop เช่นยูทิลิตีที่แสดงให้เห็นถึงกระบวนการ I / O ผ่าน

หลังจากปักหมุดที่กระบวนการใดที่มี I / O หนักใช้ต่อไปนี้เพื่อค้นหาไฟล์ที่ใช้งานอยู่

lsof -c <process name>

นั่นควรทำให้ขอบเขตแคบลงและช่วยระบุจุดที่มา


วิธีรับกระบวนการ lsof ไม่ทำอะไรเลย มีบางอย่างกำลังเขียนหลายสิ่งหลายอย่างและฉันไม่รู้อะไรเลย
4951

ขออภัยฉันใส่ยูทิลิตี้ io ผิด มันควรจะเป็นไม่ได้iotop iostatฉันแก้ไขคำตอบของฉัน
John Siu

(1) คุณสามารถอัปเดต distro (redhat / centos / ubuntu ... ) ที่คุณใช้อยู่หรือไม่ (2) นี่เป็นการติดตั้งใหม่หรือไม่? (3) การแชร์ไฟล์ใด ๆ เช่น samba กำลังทำงานอยู่?
John Siu

3

คุณสามารถใช้inotifywaitจากinotify-toolsที่จะหาว่าที่ไฟล์จะถูกเขียนไปยัง สิ่งนี้จะไม่บอกคุณว่ามีการเขียนข้อมูลเป็นจำนวนเท่าใด แต่อย่างน้อยมันก็จะบอกคุณว่าไฟล์ใดที่กำลังถูกเขียนลงไปเมื่อมันเกิดขึ้น

ตัวอย่างเช่นคำสั่งนี้จะพิมพ์ชื่อไฟล์ทันทีที่มีการสร้างแก้ไขหรือลบใน/tmp:

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /tmp
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/tmp/ CREATE test
/tmp/ MODIFY test

น่าเสียดายที่คุณจะต้องเดาว่าไดเรกทอรีใดมีไฟล์ที่ถูกเขียนไป สิ่งนี้จะล้มเหลวหากคุณพยายามที่จะใช้มันในไดเรกทอรีรากแม้ว่าจะเห็นได้ชัดว่าสามารถเขียนทับได้:

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /
Setting up watches.  Beware: since -r was given, this may take a while!
Failed to watch /; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.

2

ใช้ systemtap เพื่อตรวจสอบการเขียน / pwrite syscall คุณสามารถทำบัญชีและคุณจะเห็นว่าไฟล์ / fd ใดได้รับไบต์มากที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.