自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

記一次內(nèi)存變更引起的NFS故障

存儲 容災(zāi)備份
最近由于一些原因,做服務(wù)器資源調(diào)整,其中一臺服務(wù)器是做NFS服務(wù),通過NFS掛載到其他幾臺服務(wù)器做共享,服務(wù)器內(nèi)存從8G調(diào)整到了4G,其他不變。

[[438031]]

最近由于一些原因,做服務(wù)器資源調(diào)整,其中一臺服務(wù)器是做NFS服務(wù),通過NFS掛載到其他幾臺服務(wù)器做共享,服務(wù)器內(nèi)存從8G調(diào)整到了4G,其他不變

降配完成后,重啟服務(wù)器,看著一切正常,就沒管了

第二天DBA和我說數(shù)據(jù)備份沒寫入,登錄服務(wù)器查看,df -H命令卡住,憑經(jīng)驗,NFS掛了

登錄NFS服務(wù)器,查看NFS服務(wù)正常,查看message日志,發(fā)現(xiàn)大量關(guān)于RPC的日志

日志報錯,分片太大

為什么之前是好的,降內(nèi)存后,就出現(xiàn)分片太大,無法處理的情況?

通過查找NFS源碼,發(fā)現(xiàn)如下一段:

  1. /* 
  2. To change the maximum rsize and wsize supported by the NFS client, adjust 
  3. * NFS_MAX_FILE_IO_SIZE.  64KB is a typical maximum, but some servers can 
  4. * support a megabyte or more.  The default is left at 4096 bytes, which is 
  5. * reasonable for NFS over UDP. 
  6. */ 
  7.  
  8. #define NFS_MAX_FILE_IO_SIZE  (1048576U) 
  9. #define NFS_DEF_FILE_IO_SIZE    (4096U) 
  10. #define NFS_MIN_FILE_IO_SIZE    (1024U) 

原來,NFS服務(wù)器在決定默認(rèn)的最大讀寫塊大小時會考慮內(nèi)存的占用情況,每個NFS內(nèi)核線程最多只使用1/4096的物理內(nèi)存大小,對于UDP來說,由于一個UDP包最大才64KB,因此使用UDP協(xié)議的NFS讀寫塊大小最大不超過48KB,而kernel中則直接限制為32KB了,而使用TCP協(xié)議的NFS由于沒有這個限制,允許更大的讀寫塊大小,單Linux kernel還是將其限制為1MB了,對于物理內(nèi)存超過4GB的機(jī)器才使用最大的1MB讀寫塊大小,而記錄這個大小的文件為/proc/fs/nfsd/max_block_size

查看服務(wù)端該值大小為512KB

因為讀寫對應(yīng)的是rsize和wsize,是客戶端和服務(wù)端協(xié)商決定的,所以通過命令

  1. cat /proc/mounts |grep rsize 

查看此時客戶端的rsize和wsize

客戶端rsize和wsize都是1048567,正好是1M

而上面我們看到服務(wù)端是512K,所以兩邊目前是不協(xié)商的

猜測原因如下:NFS服務(wù)器內(nèi)存降配前,原先8G內(nèi)存,大于4G,所以max_block_size應(yīng)該是最大值1M,也就是1048567,和客戶端協(xié)商后,兩邊都定位默認(rèn)的1048567

當(dāng)NFS服務(wù)器降配到4G后,由于內(nèi)存保護(hù)及計算,NFS服務(wù)端max_block_size降為512KB,也就是524288,此時服務(wù)端和客戶端不匹配

而客戶端沒有重新連接服務(wù)端,導(dǎo)致未協(xié)商,所以客戶端分片的數(shù)據(jù)包,遠(yuǎn)大于服務(wù)端能處理的數(shù)據(jù)包,也就出現(xiàn)了message中的報錯,RPC數(shù)據(jù)分片太大

知道問題原因,就開始解決,解決方法分兩種

  • 客戶端重新掛載
  • 服務(wù)端修改max_block_size

我這里選擇了第二種方案,直接修改服務(wù)端max_block_size,因為是/proc數(shù)據(jù),nfs在啟動占用,所以需要停掉nfs修改

  1. systemctl stop nfs 
  2. # 修改max_block_size 
  3. echo 1048567 > /proc/fs/nfsd/max_block_size 

修改完成后,重新啟動NFS

  1. systemctl start nfs 

查看message,日志正常,查看客戶端,df -H可以正??吹綊燧d目錄,進(jìn)入掛載目錄正常

這里我為什么不用第一種方案?

因為此時NFS服務(wù)端是掛掉的,客戶端無法卸載,卸載會提示占用無法卸載,能卸載的方式是兩邊都重啟,重新后重新進(jìn)行協(xié)商,我不愿意重啟客戶端服務(wù)器,所以選擇第二種方式

完成后查看nfs傳輸

可以看到,傳輸正常,另外可以看到NFS此時是TCP協(xié)議的,也就驗證了TCP協(xié)議傳輸時,Linux內(nèi)核最大限制1M塊大小了

本文轉(zhuǎn)載自微信公眾號「運(yùn)維研習(xí)社」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系運(yùn)維研習(xí)社公眾號。

 

責(zé)任編輯:武曉燕 來源: 運(yùn)維研習(xí)社
相關(guān)推薦

2021-01-08 13:52:15

Consul微服務(wù)服務(wù)注冊中心

2023-01-04 18:32:31

線上服務(wù)代碼

2021-05-26 11:06:06

Kubernetes網(wǎng)絡(luò)故障集群節(jié)點(diǎn)

2022-01-10 10:26:30

Kubernetes抓包環(huán)境

2021-12-06 17:21:05

異常報錯故障

2021-08-19 09:50:53

Java內(nèi)存泄漏

2018-05-30 11:09:41

memcache服務(wù)器故障

2022-06-01 06:17:42

微服務(wù)Kafka

2022-12-17 19:49:37

GCJVM故障

2023-04-26 12:48:58

.NET程序類型

2019-12-27 10:43:48

磁盤數(shù)據(jù)庫死鎖

2020-06-12 13:26:03

線程池故障日志

2021-11-11 16:14:04

Kubernetes

2022-11-03 16:10:29

groovyfullGC

2022-02-08 17:17:27

內(nèi)存泄漏排查

2023-07-06 10:11:38

.NET模式dump

2020-08-27 21:36:50

JVM內(nèi)存泄漏

2021-08-20 11:35:04

服務(wù)運(yùn)維 故障

2022-10-27 21:32:34

oracle數(shù)據(jù)庫

2013-04-01 10:27:37

程序員失業(yè)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號