線上系統(tǒng),正在做壓力測試,剛開始10并發(fā)進行壓測,cpu壓到了100%但是系統(tǒng)最大qps才200多。通過JVM監(jiān)控查看JVM younggc很頻繁,fullGC數(shù)量為零。
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)與策劃設(shè)計,海陵網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:海陵等地區(qū)。海陵做網(wǎng)站價格咨詢:028-86922220
cpu 達到100% 則先看cpu使用率最高是哪個進程,可以直接通過linux命令 top查看,找到對應(yīng)的進程ID,發(fā)現(xiàn)正是壓測的java系統(tǒng)進程ID,找到進程ID后,然后在查找該進程下CPU使用率最高是哪個線程,可以通過top -p 進程ID -H 命令顯示線程使用cpu信息,效果如下:
圖片中PID列則為十進制顯示的線程ID,然后轉(zhuǎn)換為16進制通過jstack 系統(tǒng)進程ID | grep 16進制線程ID 可以找到對應(yīng)的線程信息如下,也就是該線程占用了一半左右的cpu
Finalizer線程是個單一職責的線程。這個線程會不停的循環(huán)等待java.lang.ref.Finalizer.ReferenceQueue中的新增對象。一旦Finalizer線程發(fā)現(xiàn)隊列中出現(xiàn)了新的對象,它會彈出該對象,調(diào)用它的finalize()方法,將該引用從Finalizer類中移除,因此下次GC再執(zhí)行的時候,這個Finalizer實例以及它引用的那個對象就可以回垃圾回收掉了。
說明Finalizer的隊列中有許多的等待回收的垃圾對象,可以通過命令查看等待回收的對象都有哪些;
jmap -finalizerinfo 進程ID
執(zhí)行命令后顯示結(jié)果如下
發(fā)現(xiàn)有好多的自定義對象,通過類名可以看到這些對象都是通過CGLIB動態(tài)代理創(chuàng)建的,而這些動態(tài)代理類都默認實現(xiàn)了finalize方法,導(dǎo)致這些對象在進行垃圾回收時必須先要執(zhí)行finalize方法,所以都積壓到了finalizer的隊列中。
1.不要使用cglib來給那些需要頻繁進行垃圾回收的對象創(chuàng)建動態(tài)代理,這些對象大量創(chuàng)建的同時,也會創(chuàng)建相等數(shù)量的動態(tài)代理對象,使得內(nèi)存占用迅速增長,并且不斷進行垃圾回收,由于代理類重寫了finalize方法,給垃圾回收帶來了額外的壓力。
2.盡量能夠復(fù)用對象,不要每次都new一個對象
有時,我們需要查看某個文件的增長速度,如日志文件,以此來感受系統(tǒng)的負載情況,因為一般情況下,日志寫入越快,說明系統(tǒng)負載越重。
本文就來介紹下Linux中查看日志增長速度的幾種方法,如下:
首先要介紹的是dd,因為dd命令幾乎所有主流發(fā)行版都自帶,無需額外安裝,如下:
如上,使用 tail -F 獲取新寫入的數(shù)據(jù),然后用管道將數(shù)據(jù)交給dd,dd將數(shù)據(jù)拷貝到 /dev/null ,其中 status=progress 是用來顯示拷貝速度的,可見,我們?nèi)罩镜膶懭胨俣仁?471 kB/s 。
pv命令可以看做是帶進度的cp,如下:
原理與dd類似,不過命令換成了pv。
由于日志數(shù)據(jù)都是程序(如java)寫入的,而在如下的偽文件中,存放著程序打開的文件信息,如下:
于是定期的讀取這個offset就可以知道文件的寫入速度了,這也是cv命令的實現(xiàn)原理,如下:
通過寫一個小腳本,定期觀察文件大小,也可查看文件寫入速度,如下:
通過watch再加上觀察,也能大致看出速度,如下:
其實轉(zhuǎn)念一想,如果我們在某個函數(shù)中打上日志,然后通過grep過濾出此日志,然后我們只要計算每秒輸出的日志行數(shù),這豈不就是函數(shù)執(zhí)行的QPS了!
這里可以通過 151/15 計算出QPS是10,由于沒有超過1000,所以看到的是0.0kB/s,如果使用pv命令,會更簡單一些,如下:
QPS是什么
我們先回憶一下,QPS的概念如下所示:
QPS(Query Per Second):每秒請求數(shù),就是說服務(wù)器在一秒的時間內(nèi)處理了多少個請求。
那我們怎么估出每秒鐘能處理多少請求呢?
OK,用日志來估計!那日志怎么記錄呢
此時,你訪問一次/home/index地址,會有下面這樣日志
那么,你就可以根據(jù)日志中,該記錄的出現(xiàn)次數(shù),統(tǒng)計index接口的QPS。
假設(shè),你這會日志已經(jīng)拿到手了,名字為xxx.log。
假設(shè)日志內(nèi)容如下
這個時候,你執(zhí)行一串命令長下面這樣的,進行統(tǒng)計就行!
出來等結(jié)果就是
然后你就知道,原來在20:40:44 分。。這個接口的QPS最高,達到了驚人的2QPS!
現(xiàn)在,來講一下命令什么意思!
那么,如果是其他日志格式,無外乎 ”cut語句“的處理不同而已,道理類似!此法可以估算出單機的某接口的 “QPS” 是多少!
估算
我們現(xiàn)在估計出了單機的QPS。接下來,估算集群的QPS。
這就要根據(jù)負載均衡的策略來估計!
比如,你部署了32臺機器,負載均衡的策略恰巧為輪詢,那集群的QPS就是單機的QPS乘32就好了。
所以,根據(jù)具體的策略,來估計整個集群的QPS多大!
多嘴一句,一般2000QPS夠了!
新聞標題:linux統(tǒng)計qps命令的簡單介紹
當前鏈接:http://www.chinadenli.net/article40/ddopieo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、、網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、網(wǎng)站排名、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)