NFS 速度變慢問題排查 性能優化

NFS 使用 RPC 來進行客戶端和服務器之間的通信。而在 RPC 的底層,NFS 使用 TCP 來進行數據的可靠傳輸,以便客戶端和服務器之間能夠有效地傳輸文件和進行遠程調用(默認為TCP,也可調整為udp)

1.首先服務器端啟動RPC服務portmap,并開啟portmap的111端口

2.服務器端啟動NFS服務,并向RPC注冊端口信息。

3.客戶端啟動RPC(portmap服務),向服務端的RPC(portmap)服務請求服務端的NFS端口

4.服務端的RPC(portmap)服務反饋NFS端口信息給客戶端。

5.客戶端通過獲取的NFS端口來建立和服務端的NFS連接并進行數據的傳輸(網絡傳輸基于TCP)。

客戶端讀取或寫入文件時,它會向服務端發送相應的文件訪問請求,隨后服務端會將文件數據通過網絡傳輸給客戶端,或者接收客戶端發送的寫入數據。

一、服務器端掛載參數調整:

如果 /etc/exports 和 /etc/fstab 中都定義了對同一共享目錄的參數,那么 /etc/exports 中的參數會優先生效。

這是因為 /etc/exports 是 NFS 服務器用于指定共享目錄和訪問控制參數的主要配置文件,而 /etc/fstab 是用于指定本地文件系統掛載點和選項的文件。

/etc/exports 詳細參數介紹:

/data *(rw,async,no_root_squash,no_subtree_check,insecure)

ro 只讀訪問

rw 讀寫訪問

sync 同步寫入,強制寫操作等待數據同步到磁盤后再返回成功

async 異步寫入,不必等待數據真正寫入磁盤就返回成功,資料會先暫存于內存中,而非直接寫入硬盤

secure NFS通過1024以下的安全TCP/IP端口發送

insecure NFS通過1024以上的端口發送

wdelay(默認) 延遲寫入,如果有多個客戶端要對同一個共享目錄進行寫操作,則將這些操作集中執行。對有很多小的IO寫操作時,使用該選項可以有效的提高效率

no_wdelay 不延遲寫入,如果有多個客戶端要對同一個共享目錄進行寫操作則立即寫入。當設置了async選項時,no_wdelay選項無效,應與sync配合使用

hide 在NFS共享目錄中不共享其子目錄

no_hide 共享NFS目錄的子目錄

subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(默認)

no_subtree_check 和上面相對,不檢查父目錄權限

root_squash root權限轉換為nobody

no_root_squash root權限保留不轉換

all_squash 所有用戶權限都轉換為nobody

no_all_squash 用戶權限保留,前提UID、GID一致

root_squash root用戶的所有請求映射成如anonymous用戶一樣的權限(默認)

no_root_squas root用戶具有根目錄的完全管理訪問權限

anonuid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的UID

anongid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的GID

NFS沒有用戶認證機制,且數據在網絡上傳送的時候是明文傳送,一般只能在局域網中使用。不需要輸入賬號密碼,NFS 一般是 IP 認證,定義好可訪問該NFS的機器ip地址即可。

NFSv4 引入了身份認證和加密機制,可提供更高的安全性。NFSv4 支持基于 Kerberos 的身份認證,為每個連接實現了加密,并且提供了更為靈活的權限控制。

(1)當設置all_squash時:訪客時一律被映射為匿名用戶(nfsnobody);

(2)當設置no_all_squash時:訪客被映射為服務器上相同uid的用戶,因此在客戶端應建立與服務端uid一致的用戶,否則也映射為nobody。root除外,因為root_suqash為默認選項,除非指定了no_root_squash。

(1)默認值。當設置root_squash時:訪客以root用戶訪問NFS服務端時,被映射為nobody用戶;

(2)當設置no_root_squash時:訪客以root用戶訪問NFS服務端時,被映射為root用戶。以其他用戶訪問時同樣映射為對應uid的用戶,因為no_all_squash是默認選項。


?

exportfs -s 查看 nfs 服務已加載的配置情況。

exportfs -rv 重載 /etc/exports。


?

性能優化相關:

nfsstat -s #查看服務器端nfs統計信息

badcalls: 表示在 RPC 調用中遇到的錯誤次數。

null: 表示空操作的數量,這個數字應該很小,因為空操作通常不會占據太多比例。

compound: 組合操作的數量,在 NFSv4 中,多個操作可以被組合成一個復合操作,這里統計的是復合操作的數量。

對于操作數量超過 1% 的操作,特別是超過 5% 的操作可能需要更詳細地關注和優化:

access: 該操作的數量為 4272032,占比 1%。access 操作用于檢查文件的訪問權限,頻繁的 access 操作可能會導致性能問題,因此需要注意是否有不正常的頻繁訪問行為。

getattr: 該操作的數量為 19389625,占比 7%。getattr 操作用于獲取文件屬性,如果 getattr 操作頻繁,也可能會導致性能問題,需要注意是否有過多的文件屬性獲取操作。

sequence: 該操作的數量為 106195445,占比 42%。sequence 操作用于客戶端和服務器之間的順序號處理,這個操作占據了統計中最大的比例,可能需要進一步調查,以確定該操作是否正常,并檢查是否有異常的序列操作頻率。

test_stateid: 該操作的數量為 81656010,占比 32%。test_stateid 操作用于在服務器上測試狀態 ID,頻繁的狀態測試操作可能會影響性能,需要注意是否有過多的狀態 ID 測試操作。

getfh: 該操作的數量為 4257319,占比 1%。getfh 操作用于獲取文件句柄,用于標識文件在 NFS 服務器上的唯一位置。如果 getfh 操作頻繁,可能需要進一步了解具體的使用場景和原因,以確定是否符合預期。

open: 該操作的數量為 2923718,占比 1%。open 操作用于打開文件或目錄。如果 open 操作頻繁,可能需要進一步了解具體的文件訪問模式和使用方式,以確定是否可以優化或改進操作。

lookup 和 lookup_root: 這兩個操作的占比分別為 2% 和 0%。lookup 操作用于查詢目錄并返回文件或目錄句柄。lookup_root 操作是查詢根目錄的操作。如果這兩個操作頻繁,可能需要進一步了解文件系統結構和訪問模式,以確定是否可以優化或改進操作。


?

1.建議所有 NFS 用戶禁用 NFS 服務器委派功能。這是為了避免Linux 內核錯誤,該錯誤會導致 NFS 客戶端因大量TEST_STATEIDNFS 消息產生的網絡流量 過多而急劇減慢 。

服務器端關閉leases 委派(以下是臨時調整,永久生效修改/etc/sysctl.conf):

echo 0 > /proc/sys/fs/leases-enable #fs.leases-enable用于在 NFS 服務器上啟用或禁用租約功能。 在 NFS 服務器上啟用了租約功能后,客戶端可以請求租約來鎖定文件,并指定鎖定的類型(共享鎖或獨占鎖)。通過租約,服務器可以確保同時只有一個客戶端持有特定文件的獨占訪問權限,或者多個客戶端持有共享訪問權限。

sysctl -w fs.leases-enable=0

ps:如果重新掛載為 4.0,我們可能不會看到該問題,因為它會避免 TEST_STATEID。

2.調整nfsd數量:

/etc/default/nfs-kernel-server文件是nfs-kernel-server服務的系統配置文件. // RPCNFSDCOUNT=8 nfsd 數量

/etc/nfs.conf文件是NFS服務器的全局參數文件。 // [nfsd]中threads字段 默認8 nfsd數量

如果需要更改內核nfsd的相關參數,就需要修改/etc/default/nfs-kernel-server文件,如果需要更改NFS服務器的共享或權限等設置,就需要修改/etc/nfs.conf文件。

/etc/nfs.conf中:

[mountd]

# threads=1

[nfsd]

# threads=8

nfsd線程:

nfsd線程是負責處理客戶端請求的守護進程線程,其中nfsd表示NFS守護進程(NFS daemon)。它主要負責處理客戶端對NFS服務器上共享的文件系統的訪問請求,包括讀取、寫入、刪除、修改文件等操作。

nfsd線程通過監聽客戶端的NFS請求,并創建相應的工作線程來處理這些請求,實現對遠程文件系統的數據訪問和管理。

mounted線程:

mounted線程是mountd服務(NFS mount服務)的線程,它負責處理客戶端對NFS服務器上文件系統的掛載和卸載請求。

mountd服務是NFS服務器上的一個服務,其主要作用是處理客戶端對NFS共享目錄的掛載請求,以便客戶端可以通過掛載點訪問遠程文件系統。

NFSD缺省值對于小型系統來說是一個很好的起點,但對于擁有兩個以上客戶的客戶機系統或者擁有兩個以上客戶機的服務器來說就多半需要增加了。

查看啟動的nfsd 進程:

ps -ef | grep nfs

在服務器端,一定要確保有足夠的 NFS 內核線程來處理所有客戶機.在默認情況Red Hat系統會啟動8個線程.對于繁忙的 NFS 服務器,應該提高這個數字,比如32或64.

2-1.可以用 nfsstat -rc 命令評估客戶機,了解是否有阻塞的現象,這個命令顯示客戶機遠程過程調用(RPC)統計數據.

例:

# nfsstat -rc

Client rpc stats:

calls retrans authrefrsh

95374234 3432 0

第二列retrans是3432,這表示從上一次系統啟動以來出現了3432次重新傳輸的情況.這個數字比較大,這可能意味著 NFS 守護進程的線程不足以處理所有客戶機的請求,就應該考慮增加NFS線程。

2-2.確定更多 NFS 線程是否有助于提高性能的一種方法是cat /proc/net/rpc/nfsd中的數據以了解 NFS 守護進程的負載。以th開頭的輸出行列出了線程數,最后 10 個數字是秒數的直方圖,前 10% 的線程忙碌,后 10%,依此類推。

理想情況下,希望最后兩個數字為零或接近零,表示線程正忙并且您沒有“浪費”任何線程。如果最后兩個數字相當高,應該添加 NFS 守護進程,因為 NFS 服務器已成為瓶頸。如果最后兩個、三個或四個數字為零,則可能沒有使用某些線程。就我個人而言,如果我的系統有足夠的內存,我不介意這種情況,因為我可能已經到了需要更多 NFS 守護進程的地步。


?

NFS的隊列大小

在linux 2.2和2.4內核里,默認的8個nfsd的輸入隊列大小是64K,2.6內核是108K.下面將設置為較合理的值256K

# echo 262144 > /proc/sys/net/core/rmem_default

# echo 262144 > /proc/sys/net/core/rmem_max

# echo 262144 > /proc/sys/net/core/wmmen_default

# echo 262144 > /proc/sys/net/core/wmmen_max

作為生產 HPC 系統的經驗法則,我傾向于在 NFS 服務器上放置不少于 64GB 的內存,因為內存總體上更便宜。你總是可以使用更少的內存,也許是 16GB,但你可能會付出性能代價。但是,如果您的應用程序不執行太多 I/O,那么權衡可能是值得的。

如果您選擇使用異步 NFS 模式,您將需要更多內存來利用async ,因為 NFS 服務器將首先將 I/O 請求存儲在內存中,響應 NFS 客戶端,然后通過讓文件系統將其寫入穩定存儲。因此,您需要盡可能多的內存以獲得最佳性能。




?

二、nfs-client 客戶端掛載選項調整 (多個選項之間用逗號分開)

nfs掛載參數文檔:https://linux.die.net/man/5/nfs

vim /etc/fstab

10.1.1.100:/data /nfs-data/data nfs4 rw,noatime,nodiratime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.3.1.76,local_lock=none,addr=10.1.1.100 0 0

nfsstat -c #查看客戶端nfs統計信息

lookup 操作用于查找指定路徑的文件或目錄。從數據看,該操作的數量較大,占比 3%。

test_stateid: 該操作的數量為 271710649,占比 65%。test_stateid 操作通常用于測試狀態 ID。

性能優化相關參數:

1.atime 更新訪問時間 這個建議別用,會降低nfs的性能 可以加上noatime

2.auto 能夠被自動掛載通過-a選項

3.async 異步掛載 sync同步掛載

sync適用在通信比較頻繁且實時性比較高的場合,比如Linux系統的rootfs通過nfs掛載,如果搞成async,當執行大型網絡通信程序如gdbserver與client之類,則系統此時會無響應,報一些“NFS is not responding“之類的錯誤。

當然并非sync就比async好,如果在遠程掛載點處進行大批量數據生成,如解壓一個大型tar包,此時速度會非常慢,我對比了一下在nfs server端解壓只需半分多鐘,在client端則要40來分鐘,性能嚴重受到影響。

當改成async后,在client端解壓只需4分多鐘,雖然比server端慢一些但性能已得到很大改善。所以當涉及到很多零碎文件操作時,選用async性能更高。

vim /fstab

10.1.1.115:/data /data nfs auto,async,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

客戶端的async 參數控制的是客戶端對服務器的讀寫操作的處理方式。

4.timeo (超時)選項是 NFS 客戶端在重新傳輸數據包(未收到 ACK)之前在 NFS 服務器上等待的時間量。timeo的值以十分之一秒為單位給出,因此如果timeo為5,則 NFS 客戶端將等待 0.5 秒再重新傳輸。默認值為0.7 (0.07 秒)

5.retrans NFS 客戶端將嘗試重新傳輸數據包的次數。如果值為5,客戶端將重新發送 RPC 數據包五次,兩次嘗試之間等待timeo秒。如果在最后一次嘗試后 NFS 服務器沒有響應,您將收到一條消息Server not responding。NFS 客戶端然后重置 RPC 傳輸嘗試計數器并以相同的方式再次嘗試(相同的timeo和retrans值)

在擁塞的網絡上,您經常會看到 RPC 數據包的重傳。一個很好的判斷方法是運行

nfsstat -r命令并查找標有retrans的列。如果數量很大,則網絡可能非常擁塞。如果是這種情況,您可能希望增加timeo和retrans的值以增加嘗試次數和 RPC 嘗試之間的時間量。雖然執行此操作會降低 NFS 性能,但它可能有助于平衡網絡流量,從而減少擁塞。根據我的經驗,擺脫擁塞和丟包可以帶來更好、更均勻的性能。

6.wsize/rsize 兩個 NFS 客戶端選項指定用于寫入 ( wsize ) 和讀取 ( rsize )的數據塊的大小。如果您不指定塊大小,則默認值由 NFS 版本和所使用的內核決定。如果您已經運行并配置了 NFS,檢查當前塊大小的最佳方法是運行命令

cat /proc/mounts 在 NFS 客戶端上并查找wsize和rsize值。

減小 rsize 和 wsize 可以在一個比較擁塞的網絡上通過向每個 NFS 請求發送較短的包列,從而提高 NFS 性能。但是帶來一個副作用,就是需要更多的包在網絡上發送數據,增加了網絡的通信量,同時在服務器和客戶機上都增加了 CPU 的開銷。

如果您的 NFS 文件系統是通過一個高速網絡掛載的,如 SP Switch,則較大的讀/寫包能提高 NFS 文件系統的性能。在 NFS V3中,rsize 和 wsize 可以設置最大至 65536,缺省值是 32768。

7.NFS文件緩存:

FS-Cache,它將 NFS 服務器上的文件緩存到本地存儲設備上,例如硬盤驅動器或 SSD,加快訪問速度。當緩存塊不命中時,會從服務器重新獲取數據并緩存到本地磁盤下來。

添加緩存文件系統FSCache

緩存文件系統是以客戶端為中心的。您可以使用客戶端上的緩存文件系統來減少服務器負載。使用緩存文件系統,可以從服務器逐塊獲取文件。文件被發送到客戶端的內存并直接進行操作。數據被寫回服務器磁盤。

將緩存文件系統添加到客戶端安裝可為每個客戶端提供本地副本。緩存文件系統的/etc/fstab如下所示:

# device device mount FS fsck mount mount

# to mount to fsck point type pass at boot options

server:/usr/dist cache /usr/dist cachefs 3 yes ro,backfstype=nfs,cachedir=/cache

緩存文件系統適用于以讀取為主的文件系統的情況,例如應用程序文件系統。此外,您應該使用緩存文件系統在慢速網絡上共享數據。與復制服務器不同,緩存文件系統可以與可寫文件系統一起使用,但性能會隨著寫入百分比的上升而降低。如果寫入百分比太高,緩存文件系統可能會降低 NFS 性能。

如果您的網絡是通過路由器互連的高速網絡,您還應該考慮使用緩存文件系統。

如果 NFS 服務器經常更新,請不要使用緩存文件系統,因為這樣做會導致比通過 NFS 操作更多的流量。

要監視緩存文件系統的有效性,請使用cachefsstat命令(在Solaris 2.5 及更高版本的操作環境中可用)。

system# /usr/bin/cachefsstat [-z] path

-z初始化統計信息。您應該在再次執行cachfsstat之前執行cachefs -z(僅限超級用戶)以收集緩存性能的統計信息。打印的統計信息反映了統計信息重新初始化之前的統計信息。

path是緩存文件系統掛載的路徑。如果不指定路徑,則使用所有已安裝的緩存文件系統。

如果沒有-z選項,您可以以常規 UNIX 用戶身份執行此命令。由cachefsstat命令提供的統計信息包括緩存命中和未命中、一致性檢查和修改操作:

緩存命中率:緩存命中占總嘗試次數的百分比(后面是實際命中和未命中的次數)

一致性檢查:執行的一致性檢查的數量。接下來是通過的數字和失敗的數字。

修改:修改操作的數量,包括寫入和創建。

cachefsstat命令的示例是:

system% /usr/bin/cachefsstat /home/sam

cache hit rate: 73% (1234 hits, 450 misses)

consistency checks: 700 (650 pass, 50 fail)

modifies: 321

在前面的示例中,文件系統的緩存命中率應高于百分之三十。如果緩存命中率低于百分之三十,則意味著文件系統上的訪問模式是廣泛隨機的或者緩存太小。

一致性檢查的輸出意味著緩存文件系統會與服務器進行檢查以查看數據是否仍然有效。高失敗率(15% 到 20%)意味著感興趣的數據正在快速變化。高速緩存的更新速度可能比適合高速緩存文件系統的更新速度更快。當您使用一致性檢查的輸出和修改次數時,您可以了解此客戶端或其他客戶端是否正在進行更改。

修改的輸出是客戶端將更改寫入文件系統的次數。此輸出是了解命中率為何較低的另一種方法。高頻率的修改操作可能伴隨著大量的一致性檢查和較低的命中率。

8.NFS文件屬性緩存

屬性緩存是在客戶端上緩存文件的元數據(如權限、屬主、屬組、訪問時間等信息),以減少對服務器的屬性查詢次數。

ac / noac

選擇客戶端是否可以緩存文件屬性。如果這兩個選項均未指定(或者指定了ac),則客戶端會緩存文件屬性。

為了提高性能,NFS 客戶端緩存文件屬性。每隔幾秒,NFS 客戶端就會檢查每個文件屬性的服務器版本是否有更新。在客戶端再次檢查服務器之前,在這些小時間間隔內服務器上發生的更改將不會被檢測到。

使用noac選項可以在訪問相同文件的 NFS 客戶端之間提供更高的緩存一致性,但會帶來嚴重的性能損失。

acregmin=n

NFS 客戶端在從服務器請求新屬性信息之前緩存常規文件屬性的最短時間(以秒為單位)。如果未指定此選項,NFS 客戶端將使用最少 3 秒。

acregmax=n

NFS 客戶端在從服務器請求新屬性信息之前緩存常規文件屬性的最長時間(以秒為單位)。如果未指定此選項,NFS 客戶端將使用最多 60 秒。

acdirmin=n

NFS 客戶端在從服務器請求新屬性信息之前緩存目錄屬性的最短時間(以秒為單位)。如果未指定此選項,NFS 客戶端將使用最少 30 秒。

acdirmax=n

NFS 客戶端在從服務器請求新屬性信息之前緩存目錄屬性的最長時間(以秒為單位)。如果未指定此選項,NFS 客戶端將使用最多 60 秒。

actimeo=n

使用actimeo將所有acregmin、acregmax、acdirmin和acdirmax設置為相同的值。如果未指定此選項,NFS 客戶端將使用上面列出的每個選項的默認值。

注意: 如果要更改選項,首先必須卸載 NFS 文件系統,更改選項,然后重新安裝文件系統。

mount -a 是一個用于掛載(mount)配置文件 /etc/fstab 中所有已定義但尚未掛載的文件系統的命令。不過這東西開機時已經掛載了,你如果沒有修改 fstab 增加新的東西那就肯定沒輸出。 mount -a 會忽略所有已經完成的操作,也就是開機時 fstab 已經掛載后,而且你沒有修改 fstab 。你再運行 mount -a ,他會自動忽略全部 fstab 內容。


?

將同時發起的NFS請求數量修改為128 重啟reboot

echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf

echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf

sysctl -w sunrpc.tcp_slot_table_entries=128

cat /proc/sys/sunrpc/tcp_slot_table_entries


?

服務器端+客戶端 TCP參數設置:

NFS 客戶端和 NFS 服務器有很多TCP 參數可以調整。Internet 上的許多文章都討論了 NFS 和一般網絡流量的 TCP 調整選項。確切的值因您的具體情況而異。在這里,我想討論兩個提高 NFS 性能的選項:系統輸入和輸出隊列。

增加輸入和輸出隊列的大小允許通過 NFS 傳輸更多數據。實際上,您正在增加可以存儲數據的緩沖區的大小。內存中可以存儲的數據越多,NFS 處理它的速度就越快(即排隊的數據越多)。NFS 服務器 NFS 守護進程共享相同的套接字輸入和輸出隊列,因此如果隊列較大,則所有 NFS 守護進程都有更多緩沖區并且可以更快地發送和接收數據。

對于輸入隊列,要修改的兩個值是/proc/sys/net/core/rmem_default(讀取隊列的默認大小,以字節為單位)和/proc/sys/net/core/rmem_max(最大大小讀取隊列(以字節為單位)。這些值很容易修改:

echo 262144 > /proc/sys/net/core/rmem_default

echo 262144 > /proc/sys/net/core/rmem_max

這些命令將讀取緩沖區大小更改為 256KiB(基數 2),這是 NFS 守護進程共享的。您可以對 NFS 守護程序共享的寫入緩沖區執行相同的操作:

echo 262144 > /proc/sys/net/core/wmem_default

echo 262144 > /proc/sys/net/core/wmem_max

更改這些值后,您需要重新啟動 NFS 服務器才能使它們生效。但是,如果您重新啟動系統,這些值將消失并使用默認值。要使這些值在重新啟動后仍然存在,您需要在/etc/sysctl.conf 文件中配置。

請注意,增加緩沖區大小并不一定意味著性能會提高。這只是意味著緩沖區大小更大。您將需要使用各種緩沖區大小測試您的應用程序,以確定增加緩沖區大小是否有助于提高性能。

另外nfs處理大量小文件導致的性能不佳:事實上,小文件性能實際上是許多文件性能問題,即當我們在一個文件夾中有大量文件,或者最終只有數百萬甚至數十億個文件時。最好加上緩存,減少網絡交互頻率。





?

三、分析磁盤IO性能是否達上限:

iostat命令是IO性能分析的常用工具

apt install sysstat

iostat <options> <device name>

-c: 顯示CPU使用情況

-d: 顯示磁盤使用情況

--dec={ 0 | 1 | 2 }: 指定要使用的小數位數,默認為 2

-g GROUP_NAME { DEVICE [...] | ALL } 顯示一組設備的統計信息

-H 此選項必須與選項 -g 一起使用,指示只顯示組的全局統計信息,而不顯示組中單個設備的統計信息

-h 以可讀格式打印大小

-j { ID | LABEL | PATH | UUID | ... } [ DEVICE [...] | ALL ] 顯示永久設備名。選項 ID、LABEL 等用于指定持久名稱的類型

-k 以 KB 為單位顯示

-m 以 MB 為單位顯示

-N 顯示磁盤陣列(LVM) 信息

-n 顯示NFS 使用情況

-p [ { DEVICE [,...] | ALL } ] 顯示磁盤和分區的情況

-t 打印時間戳。時間戳格式可能取決于 S_TIME_FORMAT 環境變量

-V 顯示版本信息并退出

-x 顯示詳細信息(顯示一些擴展列的數據)

-y 如果在給定的時間間隔內顯示多個記錄,則忽略自系統啟動以來的第一個統計信息

常用命令行:

iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盤讀寫速度單位為KB),每1s收集1次數據,共收集10次

iostat -d -m 2 #查看TPS和吞吐量信息(磁盤讀寫速度單位為MB),每2s收集1次數據

一個系統的吞度量(承壓能力)與request對CPU的消耗、外部接口、IO等等緊密關聯。單個reqeust 對CPU消耗越高,外部系統接口、IO影響速度越慢,系統吞吐能力越低,反之越高。

系統吞吐量幾個重要參數:QPS(TPS)、并發數、響應時間。 QPS(TPS):每秒鐘request/事務 數量 并發數:系統同時處理的request/事務數 響應時間:一般取平均響應時間

QPS(TPS)= 并發數/平均響應時間

iostat -d -x -k 1 10 #查看設備使用率(%util)、響應時間(await)等詳細數據, 每1s收集1次數據,總共收集10次

r/s:每秒從設備讀取的請求數量(讀取操作/秒)

rkB/s:每秒從設備讀取的數據量(以千字節為單位)

rrqm/s:每秒從磁盤請求讀取的請求數量(合并讀請求/秒)

%rrqm:合并的讀請求所占總請求數的百分比

r_await:平均每個讀請求的等待時間(毫秒)

rareq-sz:單個讀請求的平均大小(以千字節為單位)

w/s:每秒向設備寫入的請求數量(寫入操作/秒)

wkB/s:每秒向設備寫入的數據量(以千字節為單位)

wrqm/s:每秒從磁盤請求寫入的請求數量(合并寫請求/秒)

%wrqm:合并的寫請求所占總請求數的百分比

w_await:平均每個寫請求的等待時間(毫秒)

wareq-sz:單個寫請求的平均大小(以千字節為單位)

d/s:每秒向設備發出的丟棄請求的數量(數據丟失/秒)

dkB/s:每秒從設備丟棄的數據量(以千字節為單位)

drqm/s:每秒從磁盤請求丟棄的請求數量(合并丟棄請求/秒)

%drqm:合并的丟棄請求所占總請求數的百分比

d_await:平均每個丟棄請求的等待時間(毫秒)

dareq-sz:單個丟棄請求的平均大小(以千字節為單位)

f/s:每秒從設備請求失敗的數量(失敗操作/秒)

f_await:平均每個失敗請求的等待時間(毫秒)

aqu-sz:設備請求數隊列長度的平均值(調度器隊列長度)

%util:設備的活動時間百分比(設備繁忙的時間比例)

iostat -c 1 10 #查看cpu狀態,每1s收集1次數據,總共收集10次

將 CPU 的執行時間劃分為若干個時間片,每個進程在一個時間片內輪流使用 CPU,當時間片用完后,系統將CPU分配給下一個進程

%user: 表示用戶級別的 CPU 使用率,即用于執行用戶進程的CPU時間百分比。

%nice: 表示調整過優先級的用戶級進程的CPU使用率,這些進程的優先級通過"nice"命令或相關接口調整過。 Nice值的范圍從-20到+19(不同系統的值范圍是不一樣的),正值表示低優先級,負值表示高優先級,值為零則表示不會調整該進程的優先級。

%system: 表示系統級別的 CPU 使用率,即用于執行內核系統進程的 CPU 時間百分比。

%iowait: 表示 CPU 由于等待 I/O 操作而閑置的時間百分比,包括等待磁盤 I/O、網絡 I/O 等。

%steal: 表示當宿主機是一個虛擬化服務器時,被其他虛擬操作系統占用("偷取")的 CPU 時間百分比。

%idle: 表示 CPU 空閑時間的百分比,即 CPU 沒有執行任何任務的時間百分比。

拓展:

top命令(推薦htop 可以看每個核的cpu使用率) cpu 百分比參數含義:%Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

us (user):表示用戶空間程序執行的時間百分比。

sy (system):表示系統內核程序執行的時間百分比。

ni (nice):表示執行“nice”命令調整過優先級的用戶空間程序的時間百分比。 Nice值的范圍從-20到+19(不同系統的值范圍是不一樣的),正值表示低優先級,負值表示高優先級,值為零則表示不會調整該進程的優先級。

id (idle):表示 CPU 空閑時間的百分比。

wa (wait):表示 CPU 等待 I/O 操作的時間百分比。

hi (hardware interrupts):表示 CPU 處理硬件中斷的時間百分比。

si (software interrupts):表示 CPU 處理軟件中斷的時間百分比。

st (steal):表示當宿主機是一個虛擬化服務器時,被其他虛擬操作系統占用("偷取")的 CPU 時間百分比。


?

性能分析

I/O瓶頸

如果%iowait的值過高,表示硬盤可能存在I/O瓶頸。還需結合其他參數具體分析,解釋如下:

%iowait是%idle的一個子集,其計算方法是這樣的:

如果 CPU 此時處于 idle 狀態,內核會做以下檢查 - 1、是否存在從該 CPU 發起的一個未完成的本地磁盤IO請求 - 2、是否存在從該 CPU 發起的網絡磁盤掛載的操作

如果存在以上任一情況,則 iowait 的計數器加 1,如果都沒有,則 idle 的計數器加 1。

也就是說: 如果當前有進程在等待 I/O 請求的話,那么增加 iowait 的時間。如果當前沒有進程在等待 I/O 請求的話,那么增加 idle 的時間。

所以正確解釋是:有進程在等待 IO,被阻塞了,并且當前系統是空閑的,沒有其他進程在運行。

內存不足

%idle值高,表示CPU較空閑,如果%idle值高但系統響應慢時,有可能是CPU在等待分配內存,此時應加大內存容量

CPU資源不足

如果%idle值持續低于10,那么系統的CPU處理能力相對較低,表明系統中最需要解決的資源是CPU

IOPS 計算

計算方式: r/s+w/s

I/O per second,即每秒鐘可以處理的I/O個數。

隨機讀寫頻繁的應用(一般指I/O小于64KB的應用場景),如小文件存儲(圖片)、OLTP數據庫、郵件服務器,關注隨機讀寫性能,IOPS是關鍵衡量指標。

吞吐量 計算

計算方式: rkB/s+wkB/s

順序讀寫頻繁的應用,傳輸大量連續數據,如電視臺的視頻編輯,視頻點播VOD(Video On Demand),關注連續讀寫性能。數據吞吐量是關鍵衡量指標。

其他IO分析工具:

pidstat -d 1 -p 500 //按進程展示io信息 -d 間隔1s -p 指定進程號

iotop //監視系統中各進程磁盤 I/O 活動,可排序


?

四、測試服務器端 與 客戶端 網絡速度:

iperf3 -s //服務器端監聽5201

客戶端測試:

iperf3 -c 10.1.1.100 -P 1 -n 1000M // -P 傳輸線程總數 -n 傳輸數據總量

網卡的帶寬速率維持在80Mbits/sec左右,而測試的服務器是千兆網卡,這個測試值也基本合理。

在輸出的最后,iperf還給出了總的數據發送、接收量,并給出了帶寬速率平均值。通過這些值,基本可以判斷網絡帶寬是否正常,網絡傳輸狀態是否穩定。

interval傳輸間隔 Transfer傳輸數據量 Bitrate傳輸速率 Retr 重試 Cwnd擁塞窗口

Connecting to host 10.1.1.115, port 5201

[ 5] local 10.3.1.172 port 51808 connected to 10.1.1.115 port 5201

[ ID] Interval Transfer Bitrate Retr Cwnd

[ 5] 0.00-1.00 sec 9.57 MBytes 80.3 Mbits/sec 0 199 KBytes

[ 5] 1.00-2.00 sec 11.7 MBytes 97.8 Mbits/sec 0 199 KBytes

[ 5] 2.00-3.00 sec 9.67 MBytes 81.1 Mbits/sec 0 199 KBytes

[ 5] 3.00-4.00 sec 11.5 MBytes 96.2 Mbits/sec 1 222 KBytes

[ 5] 4.00-5.00 sec 7.25 MBytes 60.8 Mbits/sec 0 222 KBytes

[ 5] 5.00-6.00 sec 8.56 MBytes 71.8 Mbits/sec 0 222 KBytes

[ 5] 6.00-7.00 sec 8.30 MBytes 69.6 Mbits/sec 0 222 K

五、dd測試nfs?讀寫速度:

dd if=/dev/zero of=/tmp/testfile bs=1G count=1

nfs掛載 10.1.1.115/data /nfs-data/data

測試寫入速度:dd if=/dev/zero of=/data/testfile bs=1G count=1

1073741824 bytes (1.1 GB, 1.0 GiB) copied, 42.0247 s, 25.6 MB/s

測試讀取速度:dd if=/nfs-data/data/testfile of=/dev/null bs=10M count=1

1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.972609 s, 1.1 GB/s

if=文件名:輸入文件名,默認為標準輸入。即指定源文件。

of=文件名:輸出文件名,默認為標準輸出。即指定目的文件。

bs=bytes:同時設置讀入/輸出的塊大小為bytes個字節。

count=blocks:僅拷貝blocks個塊,塊大小等于ibs指定的字節數。

/dev/null,它是一種特殊的虛擬設備,用于寫入而不是讀取,寫入/dev/null的任何內容都會從操作系統中消失,可以把它視為一個“黑洞”。

/dev/zero,它也是一種特殊的虛擬設備,用于讀取而不是寫入,當讀取該文件時,他會提供無限的空字符null。

六、nfs日志:

NFS日志是NFS服務器生成的日志,常常用于分析NFS服務的性能和問題,如擁有瓶頸的文件系統或網絡故障等。NFS日志記錄了NFS服務器和客戶端之間交換的信息和事件,這些信息和事件可以幫助管理員分析和診斷系統問題。

/var/log/syslog:這個日志文件是系統的主要日志文件,包括了各種系統事件和服務的日志信息。NFS的相關信息也會記錄在這個文件中。

/var/log/auth.log:這個日志文件主要用于記錄認證和授權相關的日志信息。如果在NFS的設置中啟用了身份驗證機制(如基于用戶或主機的身份驗證),那么相關的日志信息會記錄在這個文件中。

NFS日志的格式通常是: 時間戳 | 主機名 | 進程號 | 消息級別 | 消息內容

Sep 15 18:38:51 localhost kernel: [ 2.221981] nfsd: last server has exited

在這個例子中,事件發生的時間為9月15日18點38分51秒;事件發生在名為localhost的主機上;事件所涉及的進程號是內核;消息級別為“kernel”,表示事件的嚴重程度為內核級別;消息內容是“nfsd: last server has exited”,表示NFS服務器的最后一個服務器已退出。

NFS日志通常記錄了NFS服務器和客戶端之間的交互信息和事件,主要包括以下幾個方面:

(1)連接信息:NFS服務器和客戶端的連接信息,如IP地址、主機名等。

(2)文件訪問信息:NFS客戶端對NFS服務器上的文件進行的訪問操作,如讀、寫、刪除等。

(3)緩存信息:NFS客戶端對文件進行緩存的操作,如緩存文件的讀、寫、刷新等。

(4)錯誤信息:NFS客戶端請求NFS服務器時所產生的錯誤信息,如訪問權限錯誤、NFS服務器忙等。



?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167019.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

教師工作就業前景

在這個知識爆炸的時代&#xff0c;當老師無疑是社會發展的重要基石。隨著科技的進步和社會的發展&#xff0c;教育行業的需求也在不斷增長。那么&#xff0c;教師工作的就業前景如何呢&#xff1f; 我們來看看教師工作的市場需求。隨著國家對教育的重視和投入的增加&#xff0c…

C/C++ 實現Socket交互式服務端

在 Windows 操作系統中&#xff0c;原生提供了強大的網絡編程支持&#xff0c;允許開發者使用 Socket API 進行網絡通信&#xff0c;通過 Socket API&#xff0c;開發者可以創建、連接、發送和接收數據&#xff0c;實現網絡通信。本文將深入探討如何通過調用原生網絡 API 實現同…

「Java開發中文指南」IntelliJ IDEA插件安裝(一)

IntelliJ IDEA是java編程語言開發的集成環境。IntelliJ在業界被公認為最好的Java開發工具&#xff0c;尤其在智能代碼助手、代碼自動提示、重構、JavaEE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、 創新的GUI設計等方面的功能是非常強大的。 插件擴展了Intel…

【分布式】分布式中的時鐘

一、物理時鐘 vs 邏輯時鐘 時鐘的存在主要是為了標識事件的發生順序。 分布式系統不使用物理時鐘記錄事件&#xff0c;分布式系統中每個節點記錄的時間并不一樣&#xff0c;即使設置了 NTP 時間同步節點間也存在毫秒級別的偏差 所以需要有另外的方法記錄事件順序關系&#x…

vue2中使用echarts

1,安裝echarts npm install --save echarts 2&#xff0c;具體頁面 <template><div class"app-container"><div class"aa" id"main" style"width: 500px; height: 400px;"></div></div> </te…

PDF 批量處理軟件BatchOutput PDF mac中文版介紹

BatchOutput PDF mac是一款適用于 Mac 的 PDF 批量處理軟件。它可以幫助用戶將多個 PDF 文件進行異步處理&#xff0c;提高工作效率。 BatchOutput PDF 可以自動化執行許多任務&#xff0c;包括 PDF 文件的打印、轉換、分割、壓縮、加密、重命名等&#xff0c;而且它還可以將自…

Elasticsearch知識

目錄 Elasticsearch邏輯設計和物理設計 邏輯設計物理設計Elasticsearch原理 倒排索引文檔的分析過程保存文檔搜索文檔寫數據的底層原理 數據刷新&#xff08;fresh&#xff09;事務日志的寫入ES在大數據量下的性能優化 文件系統緩存優化數據預熱文檔&#xff08;Document&…

【數據分享】2023年我國省市縣三級的瞪羚企業數量(免費獲取/Excel/Shp格式)

企業是經濟活動的參與主體。一個城市的企業數量決定了這個城市的經濟發展水平&#xff01;比如一個城市的金融企業較多&#xff0c;那這個城市的金融產業肯定比較發達&#xff1b;一個城市的制造業企業較多&#xff0c;那這個城市的制造業肯定比較發達。 之前我們給大家分享了…

《opencv實用探索·二》根據RGB的像素排列來理解圖像深度、像素深度和位深度

通常對于RGB圖像主要分為RGB16&#xff0c;RGB24和RGB32。RGB16從高位到低位的排列為R->G->B&#xff0c;RGB24和RGB32從高位到低位的排列為B->G->R。 RGB16: 16 位為一個存儲單元&#xff08;一個像素&#xff09;&#xff0c;來存儲一個RGB像素;因為人眼對綠色比…

社區物聯網云服務架構設計

文章目錄 1 摘要2 架構圖2.1 社區物聯網云服務網絡拓撲圖2.2 社區物聯網云服務通訊流程圖2.3 社區遠程開鎖功能流程圖 3 應用場景 1 摘要 隨著社區管理越來越智能化&#xff0c;社區物聯網升級與改造的市場空間也越來越大。社區物聯網包含樓宇對講、門禁門鎖、通道閘等等設備系…

Netty 模型理解

參考文章 1 參考文章 2 官網API文檔 Reactor模型 Netty模型 Netty主要基于主從Reactor多線程模型進行了一定的修改&#xff0c;該模型包括以下幾個組件&#xff1a; MainReactor&#xff08;主Reactor&#xff09;&#xff1a;負責處理客戶端的連接請求。它監聽服務器上的端口…

Linux:大文件查找、切割、統計操作命令

1、查找文件夾某個文件中指定內容 grep -r -l "指定內容" /文件夾路徑 2、統計文件夾里文件個數 ll | grep ^- | wc -l 3、切割日志文件 split -b 200M -d -a 3 filename file_ 4、查看服務器磁盤里有哪些大文件夾 du -h --max-depth1 | sort -nr 5、查找/h…

MySQL數據庫入門到大牛_基礎_15_存儲過程與函數

前面我們介紹了數據自帶的函數&#xff0c;此處提到的函數&#xff0c;指的是用戶自定義函數。存儲函數是一定會有返回值的&#xff0c;存儲過程是可以沒有返回值的。 MySQL從5.0版本開始支持存儲過程和函數。存儲過程和函數能夠將復雜的SQL邏輯封裝在一起&#xff0c;應用程序…

中電金信:守【政】創新,探路保險數字化轉型“新范式”

11月23日&#xff0c;CIIP2023中國保險科技創新合作大會在京舉辦。大會匯集保險科技領域行業專家、學者、國內外頭部險企及保險科技公司負責人等各界人士&#xff0c;立足保險行業高質量發展和創新驅動理念&#xff0c;尋找行業數字化轉型新動能、新視角&#xff0c;為保險科技…

python中range函數的用法

range() 是Python的一個內置函數。語法格式為&#xff1a;range(start, stop, step) start是初始值&#xff0c;stop是最終值&#xff0c;step是步長。range()函數僅適用于整數&#xff0c;所有參數都必須是整數。步長值可以為正數或負數&#xff0c;不得為零。使用range函數時…

如何去掉圖片水印不傷原圖?無痕去水印教程分享!

如何去掉圖片水印不傷原圖&#xff1f;在電商廣告設計和營銷領域&#xff0c;水印已經成為一種常見的版權保護手段。不過&#xff0c;水印也給淘寶商家帶來了一些困擾。那么如何去掉圖片水印還能不傷原圖呢&#xff0c;接下來&#xff0c;將分享簡單好用的無痕去水印教程&#…

Rust UI開發(二):iced中如何為窗口添加icon圖標

注&#xff1a;此文適合于對rust有一些了解的朋友 iced是一個跨平臺的GUI庫&#xff0c;用于為rust語言程序構建UI界面。 想要了解如何構建簡單窗口的可以看本系列的第一篇&#xff1a; Rust UI開發&#xff1a;使用iced構建UI時&#xff0c;如何在界面顯示中文字符 本篇是系…

VMware 虛擬機設置靜態IP

1.橋接模式&#xff1a;無線網卡虛擬機可以橋接的&#xff0c;Vmware0是虛擬機默認進入的虛擬網絡&#xff0c;打開虛擬網絡編輯器把Vmware0橋接到具體的無線網卡上&#xff0c;再打開網卡設置選擇橋接模式即可。 2、.NAT模式下 &#xff1a;window下VMnet8: IPv4 地址 . . . …

Redis分片備庫切換操作

Redis分片備庫切換操作 場景描述&#xff1a; 分片集群&#xff1a; 1.ipa:5001-ipa:5002 2.ipb:5001-ipb:5002 需將兩個分片備庫互置完成災備 操作步驟 準備工作 主機密碼&#xff1a;1qaz!QAZ 獲取節點信息命令 /redispath/bin/redis-cli -a password -h ip -p port red…

軟考信息系統項目管理師考試真的越來越難了

浙江&#xff0c;深圳&#xff0c;青海&#xff0c;寧波&#xff0c;湖南等地都發布了2023年上半年的軟考合格人員名單。根據這份名單再對比一下上半年的各省軟考報名人數&#xff0c;可以看出來&#xff0c;軟考通過率確實有大幅下降的趨勢&#xff0c;信息系統項目管理師考試…