ค้นหากระบวนการที่กำลังเขียนลงฮาร์ดไดรฟ์


31

สำหรับ Lenovo T400 และ Ubuntu ไฟสำหรับเขียนฮาร์ดไดรฟ์ยังคงกะพริบอยู่ ฉันสงสัยว่าใน Linux เป็นไปได้หรือไม่ที่กระบวนการจะทำ I / O กับฮาร์ดไดรฟ์? เช่นเดียวโดยtopคุณสามารถค้นหาสิ่งที่กระบวนการกำลังใช้ซีพียูและหน่วยความจำมากที่สุด

คำตอบ:


41

ไอโซโทปเป็นเครื่องมือที่ดีสำหรับสิ่งที่คุณต้องการ นอกจากนี้ยังอนุญาตให้หนึ่งแสดงจำนวน I / O สะสมบน DISK READ, DISK WRITE, SWAPIN และ IO ใด ๆ (เปอร์เซ็นต์โดยรวม) นี่คือผ่านอินเทอร์เฟซที่ดี:

  • คุณเพียงแค่กดaบนคีย์บอร์ดและมันจะเรียงลำดับกระบวนการ Hungriest ด้านบน
  • rย้อนกลับเพื่อคุณเพียงแค่กด
  • หากคุณต้องการจัดเรียงตามคอลัมน์อื่นคุณเพียงกดปุ่มซ้าย / ขวา

ชอบtop, นำเสนอค่อนข้างยุ่ง อีกอย่างคือมันไม่มีตัวเลือกมากมายที่topมี (เช่นฉันไม่สามารถเลือกที่จะซ่อนคอลัมน์ใด ๆ ที่ฉันไม่สนใจ) ได้ แต่เครื่องมือนั้นดีเกินพอสำหรับวัตถุประสงค์เฉพาะ


3
Powertopยังมีประโยชน์ในการค้นหาสิ่งที่ใช้แบตเตอรี่ในแล็ปท็อป ไอโซโทปยังคงเป็นที่แรกที่มองหาการเข้าถึงดิสก์
Gilles 'หยุดความชั่วร้าย'

สามารถผ่าน-o( --only) เพื่อกรองงานทั้งหมดที่ไม่ได้ทำ I / O ใด ๆ ทำให้รายการมีผู้คนน้อยลง
Marcin Orlowski

15

คุณสามารถใช้lsof( man lsof ) ต่อไปนี้จะส่งคืนรายการไฟล์ทั้งหมดที่เปิดสำหรับการเขียน:

lsof | grep -e "[[:digit:]]\+w"

1
ไฟล์ใดบ้างที่เปิดอยู่และไฟล์ใดบ้างที่ถูกเข้าถึงจริง ๆ เป็นสองสิ่งที่แตกต่างกัน
psusi

@psusi ไฟล์ที่เปิดอยู่สำหรับการเขียนน่าจะเป็น "เข้าถึง" นอกจากนี้ยังสามารถดึงข้อมูลเพิ่มเติมได้โดยการเรียนรู้ lsof ผ่าน manpage ของมัน
James Sumners

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

wจากคำสั่งดังกล่าวทำให้คุณ grep สำหรับไฟล์ที่เปิดสำหรับการเขียนเท่านั้น ไฟล์ที่เปิดสำหรับการเขียนและการอ่าน ( u) จะไม่ปรากฏ แต่ยังสามารถเขียนได้ หากคุณต้องการที่จะเห็นไฟล์ที่เปิดสำหรับการเขียนและสำหรับการอ่าน + เขียนฉันเชื่อว่านี่คือสิ่งที่คุณกำลังมองหา:lsof | grep -e "[[:digit:]]\+[wu]\{1\}"
Martijn

1
@Martijn คุณจะต้องใช้grep -e**w**เพื่อหลีกเลี่ยงการจับคู่[0-9]\+[wu]ในคอลัมน์อื่น


2

โดยเฉพาะอย่างยิ่งสำหรับการทำงานของดิสก์ต่ำจำเป็นต้องใช้ไอโซโทปในโหมดแบทช์เพื่อป้องกันไม่ให้สายการเข้าถึงสั้น ๆ หายไปอย่างรวดเร็ว คำตอบโดยฉันจะเข้าสู่ระบบไฟล์อ่าน / เขียนโดยชื่อไฟล์ใน Linux ได้อย่างไร แสดงวิธีการทำ

จนถึงiotopเป็นทางออกโดยรวมที่ดีที่สุด คำสั่งต่อไปนี้ให้ผลลัพธ์แบบเรียลไทม์ของกระบวนการทั้งหมดโดยใช้ดิสก์

iotop -bktoqqq -d .5

where: -b     is batch mode
       -k     is kilobytes/s
       -t     adds timestamp
       -o     only show processes or threads actually doing I/O
       -qqq   removes output headers
       -d .5  updates every .5 seconds

เมื่อคุณมีรหัสกระบวนการคุณยังสามารถค้นหาไฟล์ด้วย

 lsof -p $PID

1
คำตอบนี้แตกต่างจากคำตอบ (เก่ามาก) ข้างต้นอย่างไร เป็นการดีเมื่อตอบคำถามเก่าเพื่ออธิบายว่าคำตอบของคุณแตกต่างจากคำตอบก่อนหน้าอย่างไร สิ่งนี้ช่วยให้ผู้อ่านเรียงลำดับคำตอบ
Stephen Rauch

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