2019/11/05日對項目壓測時出現服務內存激增導致OOM。
壓測線程是100個,瞬間服務的內存占用就跑到了4個G。對服務的堆進行dump
jmap -dump:format=b,file=heap.hprof <pid>
發現主要是byte[]占用了88.2%的內存。
那么大的一個數據,考慮查找最大的對象來評判是否存在異常。
對相關對象進行檢索發現,該類對應的實例就直接占用了1個多G的內存。
通過后續的搜索發現是spring 中的配置信息將max-http-header-size設置為了10M,正好與每一個headbuffersize匹配。此處就應該知道是由於不正確的參數配置導致了並發情況下的內存激增。
檢索tomcat的文檔,發現該參數的默認值是4KB。
后續調整該參數后問題得到解決。因為使用token做認證,默認設置的頭大小放不下,后續往上漲了4K,變為8k后能夠解決token過長無法存儲以及內存激增問題