linux nginx 内存占用,nginx内存占用过高
nginx內存占用過高.md
現象
nginx運行一段時間后,內存占用非常高,超出系統最大內存后,開始使用SWAP,直至SWAP用盡,系統崩潰。內核參數vm.swappiness = 1。
如圖:
監(jiān)控趨勢圖:
分析和排查
因為之前使用的nginx版本為 1.11 ,出現內存泄露bug的可能性較小,并且網上沒有相關反饋。
之后開始分析nginx的配置文件,首先發(fā)現的比較特殊的配置是防刷模塊配置。
修改了防刷模塊配置,觀察一段時間,無效!
于是繼續(xù)查找配置文件,發(fā)現client_header_buffer_size有點大,做了調整
client_header_buffer_size20000k;
#@修改為
client_header_buffer_size32k;
觀察了幾天,問題解決了,再也沒出現內存占用過高的問題。汗,前人挖的大坑啊,訪問量低了還看不出來。
分析
Sets buffer size for reading client request header. For most requests, a buffer of 1K bytes is enough. However, if a request includes long cookies, or comes from a WAP client, it may not fit into 1K. If a request line or a request header field does not fit into this buffer then larger buffers, configured by thelarge_client_header_buffers directive, are allocated.
Nginx 使用 client_header_buffer_size 緩存客戶端的請求頭,對于大部分請求,1K的默認值已經足夠了。一旦請求頭超過了1K,空間不夠了,nginx就通過 large_client_header_buffers 按需擴容,這樣做可以平衡資源和性能。
比如說大部分請求頭的大小在 2K 以內,小部分的請求頭在 10K 左右,此時理論上我們可以通過調整 client_header_buffer_size 到 10K 來解決問題,不過這樣的話無疑浪費了寶貴的內存,更好的方法是調整 client_header_buffer_size 到 2K 滿足大部分請求頭的需求,至于小部分 10K 的請求頭,則通過調整 large_client_header_buffers 來滿足。
參考資料
總結
以上是生活随笔為你收集整理的linux nginx 内存占用,nginx内存占用过高的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10使用cmd强行删除无法删除文件
- 下一篇: linux 其他常用命令