การวิเคราะห์ประสิทธิภาพเซิร์ฟเวอร์ Linux NFS


22

ฉันต้องการทำการวิเคราะห์เซิร์ฟเวอร์ NFS ของเราเพื่อช่วยติดตามปัญหาคอขวดที่อาจเกิดขึ้นในแอปพลิเคชันของเรา เซิร์ฟเวอร์กำลังเรียกใช้ SUSE Enterprise Linux 10

สิ่งที่ฉันต้องการทราบคือ:

  • ไฟล์ใดบ้างที่ถูกเข้าถึงโดยไคลเอนต์ใด ๆ
  • อ่าน / เขียนปริมาณงานต่อลูกค้าหนึ่งราย
  • ค่าใช้จ่ายที่กำหนดโดยการโทร RPC อื่น ๆ
  • เวลาที่ใช้ในการรอคำขอ NFS อื่น ๆ หรือดิสก์ I / O เพื่อให้บริการลูกค้า

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


ดูเหมือนว่าชนิดของระบบที่เขียนขึ้นสำหรับการเคาะ เอกสารนั้นน่าเบื่อนิดหน่อย แต่ฉันคิดว่าคุณสามารถทำอะไรบางอย่างเพื่อทำการวิเคราะห์แบบนี้ได้ sourceware.org/systemtap/examples/keyword-index.html
Cian

คำตอบ:


2

แค่ความคิดลองดมการจราจร nfs ด้วย wireshark อาจบอกให้คุณทราบว่าผู้ใช้รายใดเข้าถึงไฟล์ใดบ้าง:

tshark -R nfs -i eth0

2

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

สำหรับการใช้ collectl ในการตรวจสอบ nfs จะให้เอาต์พุต nfsstat ในรูปแบบที่อ่านง่ายขึ้น แต่สิ่งที่ดีกว่าคือคุณสามารถปล่อยให้มันทำงานเป็นเวลาหลายชั่วโมงหรือหลายวันและเล่นข้อมูลที่คุณรวบรวมไว้ในพื้นหลัง สำหรับคำร้องขอเพื่อดูว่ากระบวนการใดที่กำลังทำอยู่ collectl ยังสามารถรวบรวมข้อมูลกระบวนการรวมถึงจำนวน I / O ที่แต่ละกระบวนการกำลังทำอยู่ คุณยังสามารถใช้คุณสมบัติชั้นนำได้แบบเรียลไทม์

หากคุณต้องการดูชุดรูปแบบดิสก์สะสมสามารถทำได้เช่นกันและแสดงทุกอย่างในการแสดงประสานงาน

ลองดู ... - ทำเครื่องหมาย


2

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

(กรุณาแจ้งให้เราเพิ่มบันทึกปิดหัวข้อนี้: มีเป็นซอฟต์แวร์ที่ตรงกับความต้องการของคุณ: ซัน DTrace ตามAnalytics (PDF) . - แต่น่าเสียดายที่ไม่สามารถใช้งานบน Linux คุณจะพบจำนวนของตัวอย่างที่ดีในบล็อกของเบรนแดนเกร็กของซึ่งแสดงให้เห็นถึง ความสามารถของเครื่องมือนี้)



1

ในความคิดของฉันนี้เน้นปัญหากับเครื่องมือของวันนี้ ที่นี่เราพูดถึงอย่างน้อย 3 รวมถึง nfsstat, iostat และ iotop จากนั้นก็มีการพูดถึง wireshare และ nfsreplay นี่ฟังดูเป็นเรื่องปกติไหมในการทำสิ่งต่างๆ? นอกเหนือจาก wireshark with เป็นหมวดหมู่ทั้งหมดของตัวเองคุณจะไม่ต้องการ 1 เครื่องมือ?

สำหรับ openers ในขณะที่ฉันพบว่าเอาต์พุตของ iostat มีประโยชน์มากมันยากเกินไปที่จะอ่านด้วยตัวเลข 0.00 ทั้งหมด Collectl รายงานข้อมูลเดียวกันที่แน่นอน แต่จัดรูปแบบได้ง่ายกว่ามากในสายตา คุณรู้อยู่แล้วว่าฉันคิดอย่างไรกับ nfsstat และเนื่องจาก collectl สามารถเล่นข้อมูลใด ๆ ได้จึงไม่จำเป็นต้องใช้ยูทิลิตี้ 'เล่นซ้ำ' สำหรับ 'iotop' การรวบรวมยังสามารถแสดงกระบวนการที่เรียงลำดับตามสิ่งใดก็ตามที่รวมอยู่ด้วย I / O

ดังนั้นคุณก็มีทุกอย่างพร้อมด้วย timestamps หากคุณต้องการช่วงเวลาการตรวจสอบที่ละเอียดยิ่งขึ้นคุณสามารถหมุนตัวอย่างไปที่ 0.1 หรือ 0.5 วินาทีหรืออะไรก็ได้ในระหว่างนั้นแม้ว่าคุณจะสร้างค่าใช้จ่ายมากขึ้นหากคุณตรวจสอบการประมวลผลที่รวดเร็วนี้

และโบนัสสุดท้ายคือสิ่งที่คุณรวบรวมด้วยการสะสมคุณสามารถโหลดลงในสเปรดชีตและพล็อตได้อย่างง่ายดายหรือใช้ colplot ซึ่งเป็นส่วนหนึ่งของ collectl-utils

-เครื่องหมาย


1

คุณอาจต้องการลองnfswatchจากhttp://nfswatch.sourceforge.net

คุณสามารถดูตัวอย่างผลลัพธ์ได้ที่http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/

nfswatchเป็นประเภทที่ชอบtop(แต่ฉันไม่แน่ใจว่ามีโหมดแบทช์) เมื่อทำงานแล้วคุณสามารถเปลี่ยนการแสดงผลได้โดยกดปุ่ม (เช่น "c" เพื่อแสดงไคลเอ็นต์ NFS โดยใช้เซิร์ฟเวอร์ NFS ของคุณ)

ในการทดสอบสั้น ๆ ของฉันnfswatchดูเหมือนจะไม่ทำงานกับ NFSv4


1
ข้อเสนอแนะที่น่าสนใจ ที่จริงแล้วผู้เขียนบอกว่าไม่รองรับ NFSv4 และเครื่องมือไม่ได้รับการปรับปรุงเป็นเวลาประมาณ 3 ปี น่าเสียดายที่มันมีประโยชน์มาก!
Tonin

1

ฉันไม่มีคำตอบที่ดีกว่าในขณะนี้ แต่คุณสามารถติดตามดิสก์ IO ได้ค่อนข้างแม่นยำด้วย

iostat -mx <delay in sec.> <devices>

มันให้ตัวเลขที่มีประโยชน์มากโดยเฉพาะขนาดคิวโดยเฉลี่ยและเวลารอ (เป็นมิลลิวินาที) สำหรับ IOs ของคุณ มันจะแสดงค่อนข้างพร้อมหากดิสก์ของคุณเป็นคอขวดและหากคอขวดเป็นจำนวน IO หรือปริมาณงาน

จากนั้นด้วย

netstat -plaute | grep nfs

คุณจะเห็นการเชื่อมต่อไคลเอนต์และไบต์ที่ถ่ายโอนจากลูกค้าแต่ละรายในเวลาจริง วนซ้ำมันสำหรับข้อมูลอย่างต่อเนื่อง มันค่อนข้างง่ายที่จะสร้างสคริปต์ที่ให้ข้อมูลต่อเนื่อง ... ฉันกำลังทำอยู่ :)

ตอนนี้ที่จะได้รับ IO ต่อกระบวนการคุณสามารถใช้ดีiotop คุณยังคงต้องหาวิธีที่จะจับคู่กระบวนการ nfsd กับลูกค้าได้

ไฟล์ใดที่ถูกเข้าถึงโดยไคลเอนต์ฉันติดอยู่ จริงๆแล้วไฟล์ที่อ่าน / เขียนจากไคลเอนต์ NFS จะไม่ปรากฏในเอาต์พุต lsof

เพียงเพื่อขยายบน netstat ให้ใช้ watch -d เพื่อดูว่าสิ่งต่าง ๆ เปลี่ยนแปลง & จัดเรียงตามโฮสต์

watch -d "netstat -plaute | grep nfs | sort -k 4,5"

นี่เป็นทางออกที่ดีที่สุดที่ฉันพบเพื่อค้นหาว่าโฮสต์ใดทำให้เกิดทราฟฟิกบน NFS จากนั้นฉันสามารถไปที่ไคลเอนต์เพื่อค้นหาไฟล์ที่เข้าถึงได้ ขอขอบคุณ!
peschü

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