大並發壓測下,redis串連異常Read timed out排查最佳化

來源:互聯網
上載者:User

壓測商務程序:擷取全國範圍地區資訊,第一次從mysql擷取資訊,擷取到資訊後hset到redis,後面的擷取資訊都走redis擷取並返回介面資料。

問題:20並發壓測擷取全國範圍地區資訊, 應用報錯,getList:merchant:area:listerror,redis串連異常Read timed out(10並發正常),應用拋出錯誤:

redis.clients.jedis.exceptions.JedisConnectionException:Could not get a resource from the pool。其實這裡是幾個問題引起的,先調節redis最大串連數

        

排查定位:

伺服器資源使用率正常,記憶體,磁碟等比較充足

redis串連相關配置正常,redis.pool.maxIdle=300,redis.pool.maxTotal=600。

redis串連數正常,netstat -nap|grep redis |wc -l,100多個活動串連。

redis -info查看redis資訊串連正常,正常串連100多個。

redis -monitor擷取資料正常,get和hget資料均正常。

查看redis日誌,如下問題:

WARNING overcommit_memory is set to 0! Backgroundsave may fail under low memory condition. To fix this issue add'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run thecommand 'sysctl vm.overcommit_memory=1' for this to take effect.

 

最佳化:vim /etc/sysctl.conf,增加vm.overcommit_memory=1,然後sysctl -p 使設定檔生效

 

備忘:核心參數vm.overcommit_memory代表記憶體配置策略,取值為0、1、2:

0, 表示核心將檢查是否有足夠的可用記憶體供應用進程使用;如果有足夠的可用記憶體,記憶體申請允許;否則,記憶體申請失敗,並把錯誤返回給應用進程。
1, 表示核心允許分配所有的實體記憶體,而不管當前的記憶體狀態如何。
2, 表示核心允許分配超過所有實體記憶體和交換空間總和的記憶體

 

若經過如上參數最佳化後,問題依然存在問題,參考串連:http://www.cnblogs.com/qlong8807/p/5149007.html

其他最佳化:由於本身業務返回資料量較大,最終採取最佳化方案為:前端把調用資料單獨寫死在js裡面,走CDN擷取資料,減少與後端互動。 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.