亞寵展、全球?qū)櫸锂a(chǎn)業(yè)風(fēng)向標(biāo)——亞洲寵物展覽會(huì)深度解析
2288
2022-05-28
現(xiàn)象
某現(xiàn)網(wǎng)局點(diǎn)進(jìn)行POC時(shí),發(fā)現(xiàn)某DN core掉,且一直無(wú)法啟動(dòng)。
core文件堆棧和dn的pg_log日志中的堆棧信息一致。
堆棧中顯示 checkpoint 時(shí)進(jìn)行 buffer 落盤時(shí)導(dǎo)致core
log中報(bào)錯(cuò)信息為:
could not flush dirty data: Cannot allocate memory
排查
再看操作系統(tǒng)內(nèi)存,發(fā)現(xiàn)還有100G以上空閑,不存在內(nèi)存不足的可能性。基本排除是因?yàn)閮?nèi)存導(dǎo)致的問(wèn)題。
通過(guò)代碼排查發(fā)現(xiàn)是調(diào)用系統(tǒng)函數(shù):sync_file_range ()。但是刷盤函數(shù)一般也不會(huì)導(dǎo)致無(wú)法申請(qǐng)內(nèi)存。
PS:此函數(shù)是Linux 2.6.17之后提供的用于提高IO性能的刷盤函數(shù),作用類似于fsync等。
既然翻車在文件操作函數(shù),可以合理懷疑文件是不是有問(wèn)題。翻一下操作系統(tǒng)日志 /var/log/messages,發(fā)現(xiàn)疑點(diǎn):
網(wǎng)上查詢錯(cuò)誤信息,基本上確認(rèn)為EXT4文件系統(tǒng)損壞,需要對(duì)文件系統(tǒng)進(jìn)行修復(fù)
修復(fù)EXT4文件系統(tǒng)
修復(fù)EXT4文件系統(tǒng)需要使用fsck.ext4命令,與windows的chkdsk命令一樣,fsck命令是linux下必不可少的文件系統(tǒng)修復(fù)工具。一般都會(huì)默認(rèn)安裝的。
使用root用戶登錄系統(tǒng)
把要修復(fù)的磁盤umount掉。使用fsck修復(fù)文件系統(tǒng)一定要先把對(duì)應(yīng)的磁盤卸載,否則是非常危險(xiǎn)的(這是不如windows的地方)。
首先檢查是否有其他進(jìn)程使用磁盤(也可以使用 lsof /dev/sdh1 查看占用情況)
fuser -mv /dev/sdh1
殺死占用的進(jìn)程,并確保沒(méi)有進(jìn)程占用磁盤(也可以使用 kill 殺掉對(duì)應(yīng)進(jìn)程)
fuser -kv /dev/sdh1 fuser -mv /dev/sdh1
卸載磁盤
umount /dev/sdh1
使用fsck工具修復(fù)系統(tǒng)
運(yùn)行命令并確認(rèn)
fsck.ext4 /dev/sdh1
運(yùn)行過(guò)程中會(huì)提示 inode 的一些信息,確認(rèn)即可。
如果不想要點(diǎn)很多次的確認(rèn)信息,可以加上 -a 參數(shù)。
修復(fù)完成后,會(huì)得到如下提示,表示fs已經(jīng)修復(fù)完成。
通過(guò)reboot重啟系統(tǒng),修復(fù)工作結(jié)束。
附:fsck命令常用選項(xiàng)及注意事項(xiàng)
fsck.ext4的manpage直接跳轉(zhuǎn)到e2fsck,因?yàn)樗苯诱{(diào)用的e2fsck命令,可以閱讀描述:
常用選項(xiàng)和注意事項(xiàng)
任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。