国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務器之家 - 數(shù)據(jù)庫 - Redis - Redis使用不當造成系統(tǒng)失去響應的Bug排查

Redis使用不當造成系統(tǒng)失去響應的Bug排查

2021-05-20 23:42解Bug之路alchemystarlzy Redis

開發(fā)反應線上系統(tǒng)出現(xiàn)失去響應的現(xiàn)象,收到業(yè)務告警以及頻繁MarkAndSweep(Full GC)告警。于是找到筆者進行排查。

Redis使用不當造成系統(tǒng)失去響應的Bug排查

前言

日常Bug排查系列都是一些簡單Bug排查,筆者將在這里介紹一些排查Bug的簡單技巧,同時順便積累素材^_^。

Bug現(xiàn)場

開發(fā)反應線上系統(tǒng)出現(xiàn)失去響應的現(xiàn)象,收到業(yè)務告警以及頻繁MarkAndSweep(Full GC)告警。于是找到筆者進行排查。

看基礎(chǔ)監(jiān)控

首先呢,當然是看我們的監(jiān)控了,找到對應失去響應的系統(tǒng)的ip,看下我們的基礎(chǔ)監(jiān)控。

Redis使用不當造成系統(tǒng)失去響應的Bug排查

機器內(nèi)存持續(xù)上升。因為我們是java系統(tǒng),堆的大小一開始已經(jīng)設置了最大值。

  1. --XX:Xms2g -Xmx2g 

所以看上去像堆外內(nèi)存泄露。而FullGC告警只是堆外內(nèi)存后一些關(guān)聯(lián)堆內(nèi)對象觸發(fā)。

看應用監(jiān)控

第二步,當然就是觀察我們的應用監(jiān)控,這邊筆者用的是CAT。觀察Cat中對應應用的情況,很容易發(fā)現(xiàn),其ActiveThread呈現(xiàn)不正常的現(xiàn)象,竟然達到了5000+多個,同時和內(nèi)存上升曲線保持一致。

Redis使用不當造成系統(tǒng)失去響應的Bug排查

jstack

java應用中遇到線程數(shù)過多的現(xiàn)象,首先我們考慮的是jstack,jstack出來對應的文件后。我們less一下,發(fā)現(xiàn)很多線程卡在下面的代碼棧上。

  1. "Thread-1234 
  2.     java.lang.Thread.State: WAITING (parking) 
  3.         at sun.misc.Unsafe.park 
  4.         ...... 
  5.         at org.apache.commons.pool2.impl.LinkedBlockingQueue.takeFirst 
  6.         ...... 
  7.         at redis.clients.util.Pool.getResource 

很明顯的,這個代碼棧指的是沒有獲取連接,從而卡住。至于為什么卡這么長時間而不釋放,肯定是由于沒設置超時時間。那么是否大部分線程都卡在這里呢,這里我們做一下統(tǒng)計。

  1. cat jstack.txt | grep 'prio=' | wc -l  
  2. ======> 5648 
  3. cat jstack.txt | grep 'redis.clients.util.Pool.getResource'  
  4. ======> 5242 

可以看到,一共5648個線程,有5242,也就是92%的線程卡在Redis getResource中。

看下redis情況

  1. netstat -anp | grep 6379  
  2. tcp 0 0 1.2.3.4:111 3.4.5.6:6379 ESTABLISHED 
  3. ...... 

一共5個,而且連接狀態(tài)為ESTABLISHED,正常。由此可見他們配置的最大連接數(shù)是5(因為別的線程正在等待獲取Redis資源)。

Redis連接泄露

那么很自然的想到,Redis連接泄露了,即應用獲得Redis連接后沒有還回去。這種泄露有下面幾種可能:

情況1:

Redis使用不當造成系統(tǒng)失去響應的Bug排查

情況2:

Redis使用不當造成系統(tǒng)失去響應的Bug排查

情況3:

調(diào)用Redis卡住,由于其它機器是好的,故排除這種情況。

如何區(qū)分

我們做個簡單的推理:

如果是情況1,那么這個RedisConn肯定可以通過內(nèi)存可達性分析和Thread關(guān)聯(lián)上,而且這個關(guān)聯(lián)關(guān)系肯定會關(guān)聯(lián)到某個業(yè)務操作實體(例如code stack or 業(yè)務bean)。那么我們只要觀察其在堆內(nèi)的關(guān)聯(lián)路線是否和業(yè)務相關(guān)即可,如果沒有任何關(guān)聯(lián),那么基本斷定是情況2了。

可達性分析

我們可以通過jmap dump出應用內(nèi)存,然后通過MAT(Memory Analysis Tool)來進行可達性分析。

首先找到RedisConn

將dump文件在MAT中打開,然后運行OQL:

  1. select * from redis.clients.jedis.Jedis (RedisConn的實體類) 

搜索到一堆Jedis類,然后我們執(zhí)行

  1. Path To GCRoots->with all references 

可以看到如下結(jié)果:

  1. redis.clients.jedis.Jedis 
  2.     |->object  
  3.         |->item 
  4.             |->first 
  5.                 |->... 
  6.                     |->java.util.TimerThread 
  7.                 |->internalPool 

由此可見,我們的連接僅僅被TimerThread和internalPool(Jedis本身的連接池)持有。所以我們可以判斷出大概率是情況2,即忘了歸還連接。翻看業(yè)務代碼:

  1. 偽代碼 
  2. void lock(){ 
  3.     conn = jedis.getResource() 
  4.     conn.setNx() 
  5.     // 結(jié)束,此處應該有finally{returnResource()}或者采用RedisTemplate 

最后就是很簡單的,業(yè)務開發(fā)在執(zhí)行setNx操作后,忘了將連接還回去。導致連接泄露。

如果是情況1如何定位卡住的代碼

到此為止,這個問題是解決了。但是如果是情況1的話,我們又該如何分析下去呢?很簡單,我們?nèi)绻业搅薺edis被哪個業(yè)務線程擁有,直接從heap dump找到其線程號,然后取Jstack中搜索即可知道其卡住的代碼棧。

  1. jmap: 
  2. redis.clients.jedis.Jedis 
  3.     |->Thread-123 
  4.  
  5. jstack: 
  6.  
  7. Thread-123 prio=... 
  8.     at xxx.xxx.xxx.blocked 

總結(jié)

這是一個很簡單的問題,知道套路之后排查起來完全不費事。雖然最后排查出來是個很低級的代碼,但是這種分析方法值得借鑒。

原文鏈接:https://mp.weixin.qq.com/s/kbtqc3oz0_pT91dVK_oU9A

延伸 · 閱讀

精彩推薦
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數(shù)db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎(chǔ),哨兵和集群都是建立在復制基礎(chǔ)上實現(xiàn)高可用的...

    李留廣10222021-08-09
  • RedisRedis的配置、啟動、操作和關(guān)閉方法

    Redis的配置、啟動、操作和關(guān)閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關(guān)閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關(guān)于Redis全量復制與部分復制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關(guān)于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農(nóng)5812019-11-18
  • RedisRedis 事務知識點相關(guān)總結(jié)

    Redis 事務知識點相關(guān)總結(jié)

    這篇文章主要介紹了Redis 事務相關(guān)總結(jié),幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis如何實現(xiàn)數(shù)據(jù)庫讀寫分離詳解

    Redis如何實現(xiàn)數(shù)據(jù)庫讀寫分離詳解

    Redis的主從架構(gòu),能幫助我們實現(xiàn)讀多,寫少的情況,下面這篇文章主要給大家介紹了關(guān)于Redis如何實現(xiàn)數(shù)據(jù)庫讀寫分離的相關(guān)資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • Redisredis實現(xiàn)排行榜功能

    redis實現(xiàn)排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現(xiàn)排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美日韩电影一区二区三区 | 久久精品无码一区二区日韩av | 亚洲精品国产电影 | 亚洲精品一区二区三区蜜桃久 | 成人av免费 | 国产精品久久久久精 | 狠狠操狠狠干 | 亚洲国产一区二区三区精品 | 久久精品无码一区二区三区 | 欧美一级特黄在线观看 | 国产日韩一区二区 | 在线黄色网 | 国产精品美女久久久久久久久久久 | 欧美国产日韩一区 | 国产成人精品一区二区三区四区 | 国产精品久久久久久久久久久久久 | 人人澡人人射 | 亚洲免费看片 | 久久久精品 | 中文字幕乱码亚洲精品一区 | 国产视频综合在线 | 一级黄色国产视频 | 国产精品99久久免费观看 | 国产乱码久久久久久一区二区 | 国产一级片儿 | 福利片在线观看 | 欧美成人久久 | 在线播放视频一区二区 | 毛片综合 | 亚洲福利一区 | 在线中文字幕av | 羞羞视频在线免费 | 国产亚洲一区二区三区 | 日韩一区二区三区在线 | 玖玖玖视频 | 久久久久久久久99精品 | 在线a∨| 久久久久久成人 | 亚洲国产一区视频 | 北条麻妃一区二区三区在线观看 | 亚洲一区国产精品 |