很多時候我們發現網站打開速度很慢,甚至打不開了,登錄服務器的時候也幾乎卡的不動了,然后我們通過后臺檢查會發現服務器內存很高。對于這樣的問題我們改怎么辦呢?
對于這種情況我們首先來分析一下內存跑滿是否是正常情況,那什么是正常情況呢?就是您用戶群足夠多,導致內存滿了的情況。這樣的情況下我們只能通過升級服務器內存來解決。而對于非正常情況呢?
對于非正常情況下出現的內存跑滿,那我們首先要分析一下是否是因為攻擊導致的,而導致內存跑滿的攻擊常遇到的就是CC攻擊,CC攻擊是通過代理服務器來模仿貌似合法的請求,這個時候好像是同時訪問服務器的人數增多了。所以就會導致服務器的資源大范圍的消耗,也會導致內存跑滿或者CPU跑滿帶寬跑滿這樣的情況。對于這樣的攻擊來說我們可以通過檢測IIS連接數的工具來檢測是否有站點連接上突增,比如正常的時候同時訪問您這個站點的用戶只有四五十個,而這個時候連接上達到幾百幾千甚至上萬。那毫無疑問就是被CC攻擊了。對于CC攻擊我們可以找機房做對應的策略或者是在服務器上面安裝安全狗之類的防護軟件進行防護,如果實在防護不了的話可以通過cdn來防護或者關閉對應的站點。
那如果不是被CC攻擊,我們怎么檢查呢?
我們啟動任務管理器,選擇進程。然后點擊內存查找是哪個進程占用內存嚴重
一般占用占用內存較大的進程有W3WP,sqlserver、mysqld.
其中w3wp就是站點,如果是w3wp的話可以查找對應的站點,然后找到站點所對應的程序池,在程序池屬性上面可以通過設置回收時間、內存最大使用值或共用進程池來減少內存的占用。
如果是SqlServer,那就是SqlServer數據庫占用嚴重。那我們就要看一下是否是程序設計不合理導致的,mysqld也是如此。如果程序并未用到數據庫的話,可以直接禁止掉數據庫。這樣內存就會恢復正常了