Logger日志輸出要使用占位符{}


最近項目做完,對一個接口應該壓測的時候,測試人員反饋,並發從1加到10的時候,tps(每秒鍾request/事務 數量)會遇到越來慢,並且內存使用率很高。

  看了具體的代碼,也就是很簡單的crud的操作,確認是有一些代碼對數據庫的查詢有冗余,查詢了兩次。懷着試試的態度把代碼修改成了查詢一次。又試了一次,發現問題還是沒有解決掉。最終定位到因為這個接口接收的參數中base64的數據,這個方法的第一句就是

 1 logger.info("收到的參數:"+str); 

  因為收到的數據參數比較大,並且打印日志的是使用字符串拼接的方式,這樣就會造成創建String對象的時候創建大量的資源。因為String對象是不可變的,所以會消耗大量的堆內存。修改打印日志的方法

 1 logger.info("收到的參數:{}",str); 

可以修改這樣的,使用占位符,對於占位符的形式而言,只有在我們需要的時候才會提取字符串,這樣就會避免創建string對象的時候消耗大量的資源。

總結:寫每行代碼都應該深思熟慮,簡單的一句日志輸出,造成了很大的性能問題,還有tps變慢。得不償失!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM