記錄一次開啟nginx後應用全掛的情況

2021-09-25 22:15:20 字數 2545 閱讀 4205

有一台阿里雲上的伺服器,上一任運維留下來的,裡面裝了nginx1.10.2 ,還開啟了iptables。之前一直都是相安無事,記憶體佔用率穩定達到85%-90%,cpu佔用率偶爾達到50%,一般在10%以下。

突然一天,發現nginx設定跳轉的網域名稱無法連線,觀察記憶體,cpu都沒問題,連線數也正常,由於能力有限,因此也未進入檢視核心方面的情況,只是做了些緊急措施,將重要的網域名稱遷出,關閉一些非必要的程式,降低cpu和記憶體,優先保證了前端網頁的可用性,但具體原因尚未找出。

在靜下心來後,開始查詢原因,一開始以為是硬性引數不足,如記憶體cpu過高,nginx裡連線過多,導致堵死,但在經過關閉程式,在nginx中配置了tcp引數後,仍然是開啟nginx後十幾秒就會直接網域名稱卡死。

告訴自己不要亂,優先看日誌,nginx只開了error日誌,沒開access日誌,看了下,沒什麼問題。然後就去看了/var/log/messages,結果發現每次重啟nginx後卡死的時候,都會有那麼一段錯誤資訊:

debug010000002015 kernel: nf_conntrack: table full, dropping packet

於是就去查了下關於這個錯誤**的問題,終於找到了原因。   這句**的中文名是:連線跟蹤表已滿,開始丟包。

是乙個基於防火牆上的乙個問題。

解決辦法:①: 關閉iptables,後續也不開(我採用了這一種,簡單粗暴)

service iptables stop

②加大防火牆跟蹤表的大小,優化對應的系統引數

設定狀態跟蹤表的最大行數              sysctl –w net.netfilter.nf_conntrack_max = 2097152

優化引數            vi /etc/sysctl.conf

net.netfilter.nf_conntrack_max  =   1048576  

net.netfilter.ip_conntrack_tcp_timeout_established  =   3600  

net.netfilter.nf_conntrack_tcp_timeout_close_wait  =   60  

net.netfilter.nf_conntrack_tcp_timeout_fin_wait  =   120  

net.netfilter.nf_conntrack_tcp_timeout_time_wait  =   120

③使用祼表,新增「不跟蹤」標識

vi  /etc/sysconfig/iptables 

*raw 

# 對tcp連線不啟用追蹤,解決ip_contrack滿導致無法連線的問題 

-a prerouting -p tcp -m tcp --dport 80 -j notrack 

-a prerouting -p tcp -m tcp --dport 22 -j notrack 

-a prerouting -p tcp -m tcp --dport 21 -j notrack 

-a prerouting -p tcp -m tcp --dport 11211 -j notrack 

-a prerouting -p tcp -m tcp --dport 60000:60100 -j notrack 

-a prerouting -p tcp -s 192.168.10.1 -j notrack 

-a output -p tcp -m tcp --sport 80 -j notrack 

-a output -p tcp -m tcp --sport 22 -j notrack 

-a output -p tcp -m tcp --sport 21 -j notrack 

-a output -p tcp -m tcp --sport 11211 -j notrack 

-a output -p tcp -m tcp --sport 60000:60100 -j notrack 

-a output -p tcp -s 192.168.10.1 -j notrack 

commit 

*filter 

# 允許ping 

-a input -p icmp -j accept 

# 對本地迴路、第5張網絡卡放行 

-a input -i lo -j accept 

-a input -i eth4 -j accept 

# 連線狀態跟蹤,已建立的連線允許傳輸資料 

-a input -m state --state established,related,invalid,untracked -j accept 

# filter表裡存在但在raw裡不存在的,缺省會進行連線狀態跟蹤 

-a input -s 192.168.10.31 -p tcp --dport 2669 -j accept 

-a input -j reject --reject-with icmp-host-prohibited 

-a forward -j reject --reject-with icmp-host-prohibited 

commit

記錄一次raid故障後的恢復和回遷資料全過程

故障發生在兩塊盤組成的乙個raid0上,其中的一塊盤亮黃燈,被raid卡踢出後,raid崩潰,下面就把當時搶救資料的整個過程進行介紹。由於硬碟是兩塊sas 300g的硬碟,先把硬碟從機器中拔出來,然後通過sas hba的方式直連到win的環境下,並在磁碟管理中將硬碟標記為離線狀態,以保證操作過程中是...

記錄一次raid故障後的恢復和回遷資料全過程

故障發生在兩塊盤組成的乙個raid0上,其中的一塊盤亮黃燈,被raid卡踢出後,raid崩潰,下面就把當時搶救資料的整個過程進行介紹。由於硬碟是兩塊sas 300g的硬碟,先把硬碟從機器中拔出來,然後通過sas hba的方式直連到win的環境下,並在磁碟管理中將硬碟標記為離線狀態,以保證操作過程中是...

記錄一次面試

怎麼觀察系統中 記憶體 行為 a.通過 proc zoneinfo 檔案,可以看到 free high low min pages 關係 free high 時候 一般不開啟 kswapd 執行緒 high free low 時,開啟 kswapd 執行緒 low free min時,alloc p...