Phân tích hiệu suất máy chủ Linux NFS


22

Tôi muốn thực hiện một số phân tích về máy chủ NFS của chúng tôi để giúp theo dõi các tắc nghẽn tiềm năng trong các ứng dụng của chúng tôi. Máy chủ đang chạy SUSE Enterprise Linux 10.

Những điều tôi muốn biết là:

  • Những tập tin nào đang được truy cập bởi khách hàng nào
  • Đọc / ghi thông lượng trên cơ sở mỗi khách hàng
  • Chi phí áp đặt bởi các cuộc gọi RPC khác
  • Thời gian chờ đợi cho các yêu cầu NFS khác, hoặc I / O đĩa, để phục vụ khách hàng

Tôi đã biết về các số liệu thống kê có sẵn /proc/net/rpc/nfsdvà trên thực tế tôi đã viết một bài đăng blog mô tả chúng một cách sâu sắc. Những gì tôi đang tìm kiếm là một cách để đào sâu hơn và giúp hiểu những yếu tố nào đóng góp vào hiệu suất được nhìn thấy bởi một khách hàng cụ thể. Tôi muốn phân tích vai trò của máy chủ NFS trong hiệu năng của một ứng dụng trên cụm của chúng tôi để tôi có thể nghĩ ra cách tối ưu hóa nó tốt nhất.


Điều này có vẻ giống như những thứ mà hệ thống tap được viết cho. Các tài liệu là một chút tào lao, nhưng tôi đoán bạn có thể làm gì đó để thực hiện loại phân tích này bằng cách sử dụng nó. sourceware.org/systemtap/examples/keyword-index.html
Cian

Câu trả lời:


2

Chỉ là một ý tưởng, cố gắng đánh hơi lưu lượng truy cập nfs với wireshark. Có thể cho bạn biết người dùng nào đã truy cập tập tin nào:

tshark -R nfs -i eth0

2

Tôi phải nói về tất cả các tiện ích * stat khác nhau có sẵn cho một người, nfsstat là điều tồi tệ nhất! Nó cung cấp cho bạn khả năng nhìn vào một loạt các quầy nhưng đó là tất cả. Nếu bạn nhìn vào chúng hai lần, BẠN phải thực hiện công việc cố gắng tìm hiểu xem mỗi bộ đếm thay đổi bao nhiêu và nếu bạn muốn biết tốc độ thay đổi thì bạn cần chia cho số giây giữa các mẫu. Nói một cách công bằng, nfsstat đã có từ nhiều năm trước khi mọi thứ vẫn còn khá thô sơ và hiện bị cản trở bởi không ai muốn thay đổi định dạng đầu ra bởi vì nó có thể sẽ phá vỡ rất nhiều thứ.

Đối với việc sử dụng colll để giám sát nfs, nó cung cấp đầu ra nfsstat ở định dạng dễ đọc hơn nhiều, nhưng tốt hơn nữa bạn có thể để nó chạy hàng giờ hoặc nhiều ngày và phát lại dữ liệu bạn đã thu thập trong nền. Đối với yêu cầu xem các quy trình đang thực hiện, colll cũng có thể thu thập dữ liệu quy trình bao gồm số lượng I / O mỗi quy trình đang thực hiện và thậm chí phát lại cho thấy người dùng I / O hàng đầu. Bạn cũng có thể sử dụng tính năng hàng đầu trong thời gian thực.

Nếu bạn muốn xem các đĩa chủ đề, bộ sưu tập cũng có thể làm điều đó và hiển thị mọi thứ trong một màn hình phối hợp.

Hãy xem thử ...


2

colll (đặc biệt là hệ thống con NFS của nó ) là một tiện ích rất hay có thể hữu ích cho phân tích của bạn nhưng nó không phù hợp với danh sách yêu cầu của bạn. Tôi không biết bất kỳ tiện ích Linux nào.

(Xin vui lòng cho tôi thêm off-topic ghi chú này: Có phần mềm phù hợp với yêu cầu của bạn: của Sun DTrace dựa trên Analytics (pdf) . - nhưng tiếc là không có sẵn trên Linux Bạn sẽ tìm thấy rất nhiều ví dụ tuyệt vời trong blog của Brendan Gregg của minh họa khả năng của công cụ này.)



1

Theo tôi điều này chính xác làm nổi bật vấn đề với các công cụ ngày nay. Ở đây chúng tôi đã đề cập ít nhất 3 bao gồm nfsstat, iostat và iotop. Sau đó, đã có đề cập đến wireshare và nfsreplay. Điều này thực sự có vẻ như một cách bình thường để làm việc? Khác với wireshark với một danh mục hoàn toàn riêng, bạn có thích 1 công cụ không?

Đối với các trình mở, trong khi tôi thấy đầu ra của i bổ sung rất hữu ích, thì quá khó để đọc với tất cả 0,00 trong các số đó. Thu thập báo cáo chính xác cùng một dữ liệu nhưng được định dạng dễ dàng hơn nhiều trên mắt. Bạn đã biết những gì tôi nghĩ về nfsstat và vì colll có thể phát lại bất kỳ dữ liệu nào nên không cần tiện ích 'phát lại'. Đối với 'iotop', thu thập cũng có thể hiển thị các quy trình được sắp xếp theo bất kỳ thứ gì bao gồm I / O.

Vì vậy, ở đó bạn có tất cả trong quá, hoàn thành với dấu thời gian. Nếu bạn cần khoảng thời gian giám sát tốt hơn, bạn có thể quay lại lấy mẫu thành 0,1 hoặc 0,5 giây hoặc bất cứ thứ gì ở giữa, mặc dù bạn sẽ tạo ra nhiều chi phí hơn nếu bạn giám sát quá trình này nhanh, nhưng với bất kỳ tiện ích giám sát quy trình nào.

VÀ phần thưởng cuối cùng là bất cứ thứ gì bạn thu thập được với colll, bạn có thể tải vào bảng tính và dễ dàng vẽ đồ họa HOẶC sử dụng colplot, một phần của colll-utils.

-dấu


1

Bạn có thể muốn thử nfswatchtừ http://nfswatch.sourceforge.net

Bạn có thể xem một số đầu ra mẫu tại http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/

nfswatchlà loại tương tự top(mặc dù tôi không chắc có chế độ hàng loạt hay không). Khi nó đang chạy, bạn có thể thay đổi thay đổi màn hình bằng cách nhấn một phím (ví dụ: "c" để hiển thị các máy khách NFS bằng máy chủ NFS của bạn).

Tuy nhiên, trong thử nghiệm ngắn gọn của tôi nfswatchdường như không hoạt động với NFSv4.


1
Gợi ý thú vị. Trên thực tế, chính tác giả cho biết NFSv4 không được hỗ trợ và công cụ này đã không được cập nhật trong khoảng 3 năm. Thật đáng tiếc vì nó sẽ được sử dụng rất nhiều!
Tonin

1

Tôi không có câu trả lời tốt hơn vào lúc này, tuy nhiên bạn có thể theo dõi IO khá chính xác với

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

Nó đưa ra các số liệu rất hữu ích, đặc biệt là kích thước hàng đợi trung bình và thời gian chờ (tính bằng ms) cho các IO của bạn. Nó hiển thị khá dễ dàng nếu các đĩa của bạn là một nút cổ chai và nếu nút cổ chai là số lượng hoặc thông lượng IO.

Sau đó với

netstat -plaute | grep nfs

Bạn sẽ thấy các kết nối máy khách và các byte được truyền từ mỗi máy khách trong thời gian thực. lặp trên đó cho dữ liệu liên tục. Sẽ khá dễ dàng để tạo một tập lệnh cung cấp dữ liệu liên tục ... Tôi đang làm việc với nó :)

Bây giờ để có được IO trên mỗi quy trình, bạn có thể sử dụng iotop tuyệt vời . Mặc dù vậy, bạn vẫn phải tìm cách khớp các quy trình nfsd với máy khách.

Đối với các tập tin đang được truy cập bởi khách hàng nào, tôi bị mắc kẹt. Trên thực tế, các tệp hiện đang đọc / ghi từ máy khách NFS thậm chí không xuất hiện trong đầu ra lsof.

Chỉ để mở rộng trên netstat, hãy sử dụng watch -d để xem mọi thứ thay đổi và sắp xếp theo máy chủ như thế nào

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

Đây là giải pháp tốt nhất tôi tìm thấy cho đến nay để tìm ra máy chủ nào gây ra lưu lượng truy cập trên NFS. Sau đó tôi có thể đến máy khách để tìm xem nó truy cập tập tin nào. Cảm ơn bạn!
peschü

0

Bạn có thể muốn kiểm tra nfsreplay. Nó có thể giúp bạn tìm hiểu những gì đang xảy ra. Ngoài ra, bạn có thể tìm thấy thông tin và các liên kết ở đây hữu ích

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.