服务器问题记录
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
- ?頁面請求,不定時無響應(yīng)
現(xiàn)象:前端頁面,有時會打不開;有時個別請求無返回信息;f12 查看請求,提示“no-referrer-when-downgrade”
分析過程:
1、查看請求對應(yīng)的服務(wù)端是否正常(查看服務(wù)器日志),發(fā)現(xiàn)服務(wù)端對于請求可以正常響應(yīng);從前端來看,同一個請求,有時有返回信息,有時無返回信息
2、查看nginx access 日志,發(fā)現(xiàn)部分請求返回http 499;同一個uri,有返回http 200 和http 499
3、查看nginx upstream 配置,發(fā)現(xiàn)配置中存在一個無效的服務(wù)端地址
結(jié)論:
nginx 不會檢測upstream 中配置的服務(wù)器是否有效,當(dāng)配置了無效的服務(wù)端地址時,請求通過nginx 轉(zhuǎn)發(fā)到該無效的服務(wù)器時,就會造成請求不可用,nginx 會將該請求的響應(yīng)封裝為 http 499
- dubbo 提示線程池已滿
現(xiàn)象:dubbo 提示線程池已滿;前端顯示服務(wù)不穩(wěn)定
分析過程:
1、查看dubbo 服務(wù)日志,日志僅顯示線程池已滿
2、查看服務(wù)對應(yīng)的 error 日志,發(fā)現(xiàn)zookeeper 分布式鎖有時會釋放失敗,然后去查看zookeeper 日志,未發(fā)現(xiàn)異常
3、阿里云監(jiān)控報警,數(shù)據(jù)庫CPU 占比超過90%
結(jié)論:
查詢某列表未使用緩存,導(dǎo)致大量請求(每分鐘5W次左右)在短時間內(nèi)訪問數(shù)據(jù)庫(本身查詢速度沒問題,但是請求量太大),造成數(shù)據(jù)庫瓶頸,并對正常的寫業(yè)務(wù)造成影響,大量對于數(shù)據(jù)庫的訪問,都在排隊(duì),造成響應(yīng)時間過長,dubbo服務(wù)線程池壓滿
解決方案:
1、按需對查詢增加 redis 緩存,JVM 緩存,nginx 緩存
2、對數(shù)據(jù)庫進(jìn)行讀寫分離處理,防止下一次大量請求導(dǎo)致的數(shù)據(jù)庫瓶頸問題
- HttpClient 多線程異常
現(xiàn)象:
java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
原因:多線程狀態(tài)下,公用一個HttpClient對象,一個請求未結(jié)束,再次發(fā)起新的請求,就會報這個錯
解決方法:
1、低版本的HttpClient,可以使用 ThreadSafeClientConnManager 來代替?BasicClientConnManager
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager();
cm.setMaxTotal(20);
HttpClient client = new DefaultHttpClient(cm, httpParams);
2、高版本的HttpClient,可以使用?PoolingHttpClientConnectionManager
PoolingHttpClientConnectionManager pcm = new PoolingHttpClientConnectionManager();
pcm.setMaxTotal(20);
CloseableHttpClient client = HttpClients.custom().setConnectionManager(pcm).build();
- MySql 存儲空間清理
數(shù)據(jù)文件的清理:使用 truncate table_name 來清理數(shù)據(jù)量多的表
使用delete 的話,不會釋放磁盤空間,需要使用:optimize table tab_name 來釋放。
注意:optimize 會鎖表,應(yīng)在空閑時期進(jìn)行處理
select sum(data_length + index_length + data_free) / 1024 / 1024 from information_schema.tables;
查詢數(shù)據(jù)文件所占空間
- 挖礦病毒?minerd
解決方案:
挖礦病毒偽裝為 ntp 進(jìn)程,但正常的ntp進(jìn)程名為ntpd
rm -rf /var/spool/cron/crontabs
rm -rf ~/.ssh/KHK75NEOiq
rm -rf /opt/KHK75NEOiq33
rm -rf /opt/*
rm -rf /etc/init.d/ntp
rm -rf /usr/sbin/ntp
rm -rf /usr/local/etc
pkill minerd
kill -9 (/usr/sbin/ntp的進(jìn)程號)
- java 進(jìn)程CPU和內(nèi)存分析
1、top 命令查看cpu和內(nèi)存占用較大的進(jìn)程pid
2、根據(jù)進(jìn)程pid,查看內(nèi)部線程占用cpu情況
ps -mp 1316 -o THREAD,tid,time | sort -rn | less
(sort -rn 以數(shù)值的方式進(jìn)行逆序排列)
3、找出占用cpu比較高的TID,需要將TID轉(zhuǎn)換為十六進(jìn)制,例如:printf "%x\n" 1731,結(jié)果 6c3
4、使用 jstack 1316 查看具體對應(yīng)的線程
5、使用?jstat -gcutil 1316 1000 100 查看jvm內(nèi)存和gc情況
- zookeeper 數(shù)據(jù)清理
./bin/zkCleanup.sh -n 50? 使用 zookeeper 自帶的清理腳本,可清理 log 和 snapshot,-n 50 是指保留50個文件(注意:是log和snapshot各保留50個的意思)
zookeeper 版本在3.4 以上的,也可以在配置中配置自動清理(zoo.cfg):
autopurge.snapRetainCount=50? ? # 保留50個
autopurge.purgeInterval=72? ? # 自動清理間隔,單位:小時
?
?
轉(zhuǎn)載于:https://my.oschina.net/u/2347047/blog/1619603
總結(jié)
- 上一篇: react+mobx:如何组织store
- 下一篇: vue基础-简介