上篇文章談到騰訊雲centos服務器不能登錄,通過查看監控信息,cpu使用過高,再騰訊雲頁面使用VNC方式直接登錄,然后根據提示信息,關閉導致內存溢出的進程,從而解決問題。
1 問題再現
昨天剛解決了問題,結果今天又發現mysql不能訪問,centos不能登錄,進入到騰訊雲的管理界面,查看監控信息,還是cpu利用率過高。
讀取硬盤的流量很大。
和上次出現的問題一樣。於是想到還是利用上次的方法,在騰訊雲管理頁面,服務器實例的右側利用VNC方式登錄,里面也有提示kill進程,然后根據提示操作,使用kill -9 xxx命令,關閉xxx進程。由於cpu利用率過高,操作起來很卡,關閉進程之后,又有另外的進程導致內存溢出,繼續提示kill進程,再繼續利用kill -9 xxx命令,提示沒有xxx進程,說明這個方法失效了,只能另想辦法。
2 問題分析及解決
CPU利用率過高,硬盤讀取量大,分析一下,應該是外部訪問服務器,一直讀取服務器的數據,導致流量大,服務器超負荷運行,於是想到,先把所有的端口給關閉,不讓外部網絡訪問服務器。
在騰訊雲的管理界面,點擊服務器實例,有一個安全組,定義了服務器的入站規則,我只保留22端口,也就是SSH登錄服務器的端口,其它端口都關閉。
將紅色方框內的端口全部關閉。然后重啟了一下服務器。
服務器啟動之后,再次查看監控信息,發現CPU利用率和硬盤讀取量都降了下來。
利用SSH可以正常登錄服務器了,登錄到服務器之后,先把防火牆打開。
systemctl start firewalld
我的服務器操作系統是Centos7,如果是Centos6,防火牆命令應該是iptables。
然后逐步放開服務器的端口,首先在騰訊雲管理頁面的安全組中,將mysql的3306端口放開,然后進入服務器,防火牆也對3306端口進行開放。
firewall-cmd --zone=public --add-port=80/tcp –permanent
開放3306端口之后,再進行測試mysql的登錄,利用mysql工具,可以正常訪問數據庫,說明我們的設置生效了。
同樣的方法,我們先在安全組中開放端口,再到centos中設置防火牆開放端口,然后是測試端口是否可以使用。依次開放web端口80,443,8080,redis端口,6379等。
3 結語
經過依次開放端口,並進行測試,最終實現了服務器的正常登錄,mysql的正常使用,徹底解決了cpu利用率過高導致的SSH不能登錄的問題。問題出現的原因,可能是centos一開始沒有開啟防火牆,有一些網絡攻擊,頻繁訪問服務器。對於公網來說,開啟防火牆,避免網絡攻擊,還是很有必要。