crontab設定導致的伺服器程式異常問題
前幾天的時候,有個同事問我一個問題,大體的意思是突然收到報警,伺服器的程式數翻了好幾倍,其實那個伺服器也沒有任何操作。所以想讓我幫忙看看。
他自己也做了一些簡單的分析,可以看出,裡面含有大量的CRONTD程式,sendmail程式等,大概佔用了近4000的程式。
$ ps -ef|grep sendmail |wc
-l
1317
$ ps -ef|grep postdrop|wc
-l
1317
$ ps -ef|grep CROND|wc -l
1315
top命令的結果如下:
top - 11:41:25 up 559 days, 16:52, 1 user, load average: 0.10, 0.10, 0.10
Tasks: 4288 total, 1 running, 4287 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32862536k total, 31871784k used, 990752k free, 629660k buffers
Swap: 16777200k total, 0k used, 16777200k free, 16914428k cached
可以從以上資訊看到,一共4288的程式,4287在sleep狀態,伺服器負載也不高,iowait很低,CPU使用率也很低。
看起來一切太平啊。
檢視磁碟空間 df-h發現空間還富餘不少。所以這個問題就有些奇怪了。
我靜了靜,這個問題似乎之前碰到過類似的,那是因為存在NFS的掛載點失效導致CROND執行失敗,結果累計了大量的後臺程式。這次的環境問題似乎還有所不同。
檢視CROND的屬主,是root,但是檢視root下的crontab的設定,只有ntpdate同步時間的crontab
10 * * * * /usr/sbin/ntpdate -s xxxx ;/sbin/clock -w
10 * * * * /usr/sbin/ntpdate -s xxxx ;/sbin/clock -w
看這個crontab是每個小時的第10分鐘開始同步時間,應該不會有這麼大的影響。
當然在分析問題的時候,腦子裡也在飛快的搜尋著,突然想起很久以前是處理過一個類似的案例,而問題的根源就是Inode滿了。可以參見很久以前的一篇文章。http://blog.itpub.net/23718752/viewspace-1812698/
這次的問題是否是同樣的原因呢,df -i檢視,發現竟然如出一轍,還是套路,原來就是Inode滿了。
這個時候我沒有急於去清理這些程式,而是打算先清理inode,在/var目錄下檢視在/var/spool/postfix/maildrop下面存在大量的檔案。
當然仔細檢視了部分檔案之後,確認是可以刪除的,這個時候就得分批刪除,要不直接刪除肯定會丟擲控制程式碼相關的錯誤來。
分批刪除大概持續了20多秒,刪除之後inode馬上就釋放了。
# time ls |xargs -n 10 rm
real 0m22.791s
user 0m2.053s
sys 0m6.490s
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 262144 3381 258763 2% /var
而再次使用top檢視,4000多的程式瞬間降了下來,只有不到400程式。
top - 12:04:54 up 559 days, 17:16, 3 users, load average: 0.16, 0.23, 0.17
Tasks: 328 total, 1 running, 327 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32862536k total, 28072444k used, 4790092k free, 638572k buffers
Swap: 16777200k total, 0k used, 16777200k free, 16739416k cached
透過zabbix的監控圖我看到了如下的結果,這個圖剛開始看的時候還有些疑惑,以為這個問題已經持續了很就,但是如此來看,是一個爆發式的增長過程。
其實解釋明白就很容易理解了,我檢視了系統的日誌,在問題發生的時間段,確實沒有其它的操作,而就是在某一個特定的時間,因為inode溢位導致sendmail,maildrop的程式阻塞,
結果大量的程式都堆積下來了。如此來看問題在釋放inode之後似乎是引刃而解了。
我檢視了一下/var/spool/postfix/maildrop目錄下的檔案,發現了一個奇怪的情況。
-rwxr--r-- 1 root postdrop 641 Aug 27 23:10 CEADC52C
-rwxr--r-- 1 root postdrop 497 Aug 27 23:10 CEB7352D
-rwxr--r-- 1 root postdrop 516 Aug 27 23:10 E62A552E
-rwxr--r-- 1 root postdrop 632 Aug 27 23:20 CCF8F530
-rwxr--r-- 1 root postdrop 506 Aug 27 23:20 CCDD852F
-rwxr--r-- 1 root postdrop 516 Aug 27 23:20 E395C531
這個目錄下的檔案生成時間似乎有些問題,案例是每個小時生成一次,每次不應該是3個檔案。這個是什麼原因呢 ,經過一番排查,發現原來是另外一個配置在作怪。
配置資訊如下:
# vi /etc/cron.d/ntpdate
###################################################
*/10 * * * * root (/usr/sbin/ntpdate xxxx;/sbin/clock -w)
*/10 * * * * root (/usr/sbin/ntpdate xxxx;/sbin/clock -w)
*/10 * * * * root (/usr/bin/rdate -s xxxx;/sbin/clock -w)
如此來看問題就很容易理解了,這樣導致了沒10分鐘一次迴圈呼叫,所以修復了問題以後,檔案的生成頻率大大降低。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2124115/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- crontab導致CPU異常的問題分析及處理
- crontab導致的頻繁傳送郵件的問題
- 伺服器架構導致的SEO收錄異常伺服器架構
- 異常程式導致大量資源佔用
- GDI資源洩漏導致的程式異常的解析
- 從原始碼分析JSONObject因版本差異導致toString格式異常問題原始碼JSONObject
- 記一次crontab中date命令錯用導致的問題
- Linux 設定錯誤的DNS 伺服器導致網路傳輸慢的問題LinuxDNS伺服器
- 當機導致slave異常分析
- STANDBY_FILE_MANAGEMENT引數未設定auto導致的ADG備庫異常
- MyBatis版本升級導致OffsetDateTime入參解析異常問題覆盤MyBatis
- 360衛士阻止程式建立,導致各種異常
- ChromeHSTS異常導致無法訪問HTTPS網頁ChromeHTTP網頁
- UE4 記憶體寫壞導致異常崩潰問題記錄記憶體
- Oracle RAC啟動因CTSS導致的異常Oracle
- MySQL Bug導致異常當機的分析流程MySql
- LOAD異常中止導致表無法訪問的解決方法
- Linux平臺由於OPROCD程式導致伺服器重啟的問題Linux伺服器
- SCHEDULER呼叫XDB程式導致效能問題
- SCN異常增長導致資料庫異常關閉風險的防範資料庫
- 記 Laravel Observer 導致 Redis 佇列異常LaravelServerRedis佇列
- cv::Mat轉QImage導致影像色彩異常
- 序列異常導致災備端應用異常處理一則
- 雲伺服器ECS伺服器訪問異常問題排查指引伺服器
- RHEL8.2-虛擬機器異常斷電導致Structure needs cleaning.問題虛擬機Struct
- Oracle 資料庫不一致導致異常的恢復Oracle資料庫
- C 語言宣告與定義不一致導致的問題
- crontab 設定
- Oracle 11g 中 cursor_sharing 設定為SIMILAR 導致的問題OracleMILA
- 異常連線導致的記憶體洩漏排查記憶體
- 非歸檔模式下異常斷電導致的資料庫無法啟動的問題修復模式資料庫
- ANALYZE導致的阻塞問題分析
- MySQL Flush導致的等待問題MySql
- 異常問題排查之旅
- 微服務異常問題微服務
- 關於JAVAMAIL導致JSP伺服器停止的問題!急JavaAIJS伺服器
- DNS伺服器故障引發流量異常問題-VeCloudDNS伺服器Cloud
- 外接程式 VMDebugger 未能載入或導致了異常 修復