案例描述
由於最近我在重構之前的APP,需要和server端進行數據交互,發現有一個現象,那么就是隔1~2天總會發生獲取數據超時的問題,而且必須要重啟服務器才能解決。早在之前,我有留意到這個問題,但是由於這個服務器目前只有我測試的時候才有訪問,其他的途徑的數據交互幾乎沒有,但是這次必須要把這個問題解決了,因為APP我肯定要上線的。
按理分析
服務器是基於阿里雲的 Linux-CentOs 6.5,由nginx解析,首先登陸阿里雲官網去查看ECS雲服務器的運行情況,顯示的是運行中,和以往一樣,費用沒到期,然后在瀏覽器中打開官網,一樣是訪問不了,當時第一個想法就是帶寬過載,為什么不是代碼問題呢?因為不能訪問是周期性的問題,肯定不是代碼問題。為了確認想法,去阿里雲發了次工單,請求下阿里的技術人員的幫助。
阿里的大牛回復和我所想的一樣,這時候就是進終端進一步解決了。我一般使用 XShell 軟件來管理linux服務器終端的,由於外部都無法訪問,那么XShell也就無法遠程了,的確如此,帶寬跑滿,哪怕是遠程終端都是不可能的。這時候由從官網進入終端。
登陸后,先用命令 sar -n DEV 1 1 查看下網卡流量的數據包和比特流等情況,1 秒 取一次值,發現是震驚的。
首先eth0 是內網卡,eth1是外網, rxpck 這個是接收的數據包,txpck 是發出的數據包,rxkB 是接收的字節, txkB 是發出的字節。發現公網在大量向外發數據包,且我上面說到,這個服務器目前只有我測試APP才有請求過來,再怎么發也不會達到19萬多/s,還有這個數據會變的,有時候達到 20 萬。是不是感覺有點 DDOS 的感覺,不過,rxpck 接收的並不多,這是DDOS 的幾率有點低,初步懷疑是有惡意程序在大量發包。
為了看看 eth1 到底發了多少,輸入 ifconfig 回車,我擦,2點多 T 啊。
為了弄清楚是目前運行的線程有哪些,我打算采用了 nethogs 這個工具,它可以監控進程實時的流量,可悲劇的是,在這之前沒安裝它,然后就打算當場安裝,然而,當我采用 yum install nethogs 安裝的時候,發現一直處於超時(time out)的情況,ping 了下百度,發現延時很高。果然,肯定受當前的情況影響。
既然查不了線程的實時流量,只能查看當前的進程了,輸入 ps -ef ,看到有一個名為 vcers 的程序占用 CPU 利用率高達 34% +
ls 一下,在 root 目錄,再 find -name “vcers” ,發現只有這么一個
解決問題
猜想,可能是它在大量發包, 於是直接 kill -TERM PID號 殺掉了 vcers 的進程,再 sar -n DEV 1 1 看下,恢復正常
刷新下APP,有數據了,再打開下官網鏈接,正常訪問。趕緊下載了 nethogs 以防萬一,最后再打印下 進程信息,確認 vcers 沒再運行, 下次再出現的話,若還過載,就徹底刪除 vcers 的可運行程序。
