国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

流弊666,Java應(yīng)用之性能測試瓶頸調(diào)優(yōu)

共 14067字,需瀏覽 29分鐘

 ·

2021-09-06 12:14

點擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”

優(yōu)質(zhì)文章,第一時間送達(dá)

引言:性能瓶頸調(diào)優(yōu)

在實際的性能測試中,會遇到各種各樣的問題,比如 TPS 壓不上去等,導(dǎo)致這種現(xiàn)象的原因有很多,測試人員應(yīng)配合開發(fā)人員進(jìn)行分析,盡快找出瓶頸所在。
理想的性能測試指標(biāo)結(jié)果可能不是很高,但一定是平緩的。

性能調(diào)優(yōu)步驟

  1. 確定問題:根據(jù)性能監(jiān)控的數(shù)據(jù)和性能分析的結(jié)果,確定性能存在的問題。
  2. 確定原因:確定問題之后,對問題進(jìn)行分析,找出問題的原因。
  3. 確定解決方案(改服務(wù)器參數(shù)配置/增加硬件資源配置/修改代碼)。
  4. 驗證解決方案,分析調(diào)優(yōu)結(jié)果。
注意:性能測試調(diào)優(yōu)并不是一次完成的過程,針對同一個性能問題,上述步驟可能要經(jīng)過多次循環(huán)才能最終完成性能調(diào)優(yōu)的目標(biāo),即:測試發(fā)現(xiàn)問題 -> 找原因 -> 調(diào)整 -> 驗證 -> 分析 -> 再測試 ...

性能瓶頸概率分布

60%:數(shù)據(jù)庫瓶頸
  • 數(shù)據(jù)庫服務(wù)器 CPU 使用率高(慢查詢、SQL 過多、連接數(shù)過多)
  • 拋出連接數(shù)過多(連接池設(shè)置太小,導(dǎo)致連接排隊)
  • 數(shù)據(jù)庫出現(xiàn)死鎖
25%:應(yīng)用瓶頸
  • 應(yīng)用出現(xiàn)內(nèi)存泄露
  • 應(yīng)用出現(xiàn)線程競爭/死鎖
  • 程序代碼的算法復(fù)雜度
  • 中間件、第三方應(yīng)用出現(xiàn)異常
  • 計算密集型任務(wù)引起 CPU 負(fù)載高
  • I/O 密集型任務(wù)引起 I/O 負(fù)載高
10%:壓測工具瓶頸
  • JMeter 單機(jī)負(fù)載能力有限,如果需要模擬的用戶請求數(shù)超過其負(fù)載極限,也會導(dǎo)致 TPS 壓不上去
5%:Linux 機(jī)器出現(xiàn)異常
  • Linux 可用內(nèi)存無法回收(開銷速率大于回收速率)

系統(tǒng)資源

  • CPU
    • 監(jiān)控內(nèi)容:CPU 使用率、CPU 使用類型(用戶進(jìn)程、內(nèi)核進(jìn)程)
    • 瓶頸分析:CPU已壓滿(接近 100%),需要再看其他指標(biāo)的拐點所出現(xiàn)的時刻是否與 CPU 壓滿的時刻基本一致。
  • 內(nèi)存
    • 監(jiān)控內(nèi)容:實際內(nèi)存、虛擬內(nèi)存
    • 瓶頸分析:內(nèi)存不足時,操作系統(tǒng)會使用虛擬內(nèi)存,從虛擬內(nèi)存讀取數(shù)據(jù),影響處理速度。
  • 磁盤 I/O
    • 監(jiān)控內(nèi)容:I/O 速度、磁盤等待隊列
    • 瓶頸分析:磁盤 I/O 成為瓶頸時,會出現(xiàn)磁盤I/O繁忙,導(dǎo)致交易執(zhí)行時在 I/O 處等待。
  • 網(wǎng)絡(luò)
    • 監(jiān)控內(nèi)容:網(wǎng)絡(luò)流量(帶寬使用率)、網(wǎng)絡(luò)連接狀態(tài)
    • 瓶頸分析:如果接口傳遞的數(shù)據(jù)包過大,超過了帶寬的傳輸能力,就會造成網(wǎng)絡(luò)資源競爭, 導(dǎo)致 TPS 上不去。

發(fā)現(xiàn)了瓶頸后,只要對癥下藥就可以了。簡單來說無論哪個地方出現(xiàn)瓶頸,只需要降低壓力或者增加這部分瓶頸資源(應(yīng)用軟件沒有瓶頸或優(yōu)化空間之后),即可緩解癥狀。
  • CPU 瓶頸:增加 CPU 資源。
  • 內(nèi)存瓶頸:增加內(nèi)存、釋放緩存。
  • 磁盤 I/O 瓶頸:更換性能更高的磁盤(如固態(tài) SSD)。
  • 網(wǎng)絡(luò)帶寬瓶頸;增加網(wǎng)絡(luò)帶寬。

CPU

后臺服務(wù)的所有指令和數(shù)據(jù)處理都是由 CPU 負(fù)責(zé),服務(wù)對 CPU 的利用率對服務(wù)的性能起著決定性的作用。

top 參數(shù)詳解

下面以 top 命令的輸出例,對 CPU 各項主要指標(biāo)進(jìn)行說明:
  • us(user):運(yùn)行(未調(diào)整優(yōu)先級的)用戶進(jìn)程所消耗的 CPU 時間的百分比。
    • 像 shell 程序、各種語言的編譯器、數(shù)據(jù)庫應(yīng)用、web 服務(wù)器和各種桌面應(yīng)用都算是運(yùn)行在用戶地址空間的進(jìn)程。
    • 這些程序如果不是處于 idle 狀態(tài),那么絕大多數(shù)的 CPU 時間都是運(yùn)行在用戶態(tài)。
  • sy(system):運(yùn)行內(nèi)核進(jìn)程所消耗的 CPU 時間的百分比。
    • 所有進(jìn)程要使用的系統(tǒng)資源都是由 Linux 內(nèi)核處理的。當(dāng)處于用戶態(tài)(用戶地址空間)的進(jìn)程需要使用系統(tǒng)的資源時,比如需要分配一些內(nèi)存、或是執(zhí)行 I/O 操作、再或者是去創(chuàng)建一個子進(jìn)程,此時就會進(jìn)入內(nèi)核態(tài)(內(nèi)核地址空間)運(yùn)行。事實上,決定進(jìn)程在下一時刻是否會被運(yùn)行的進(jìn)程調(diào)度程序就運(yùn)行在內(nèi)核態(tài)。
    • 對于操作系統(tǒng)的設(shè)計來說,消耗在內(nèi)核態(tài)的時間應(yīng)該是越少越好。通常 sy 比例過高意味著被測服務(wù)在用戶態(tài)和系統(tǒng)態(tài)之間切換比較頻繁,此時系統(tǒng)整體性能會有一定下降。
    • 在實踐中有一類典型的情況會使 sy 變大,那就是大量的 I/O 操作,因此在調(diào)查 I/O 相關(guān)的問題時需要著重關(guān)注它。
    • 大部分后臺服務(wù)使用的 CPU 時間片中 us 和 sy 的占用比例是最高的。同時這兩個指標(biāo)又是互相影響的,us 的比例高了,sy 的比例就低,反之亦然。
    • 另外,在使用多核 CPU 的服務(wù)器上,CPU 0 負(fù)責(zé) CPU 各核間的調(diào)度,CPU 0 上的使用率過高會導(dǎo)致其他 CPU 核心之間的調(diào)度效率變低。因此測試過程中需要重點關(guān)注 CPU 0。
  • ni(niced):用做 nice 加權(quán)的進(jìn)程分配的用戶態(tài) CPU 時間百分比。
    • 每個 Linux 進(jìn)程都有個優(yōu)先級,優(yōu)先級高的進(jìn)程有優(yōu)先執(zhí)行的權(quán)利,這個叫做 pri。進(jìn)程除了優(yōu)先級外,還有個優(yōu)先級的修正值。這個修正值就叫做進(jìn)程的 nice 值。
    • 這里顯示的 ni 表示調(diào)整過 nice 值的進(jìn)程消耗掉的 CPU 時間。如果系統(tǒng)中沒有進(jìn)程被調(diào)整過 nice 值,那么 ni 就顯示為 0。
    • 一般來說,被測服務(wù)和服務(wù)器整體的 ni 值不會很高。如果測試過程中 ni 的值比較高,需要從服務(wù)器 Linux 系統(tǒng)配置、被測服務(wù)運(yùn)行參數(shù)查找原因。
  • id(idle):空閑的 CPU 時間百分比。
    • 一般情況下, us + ni + id 應(yīng)該接近 100%。
    • 線上服務(wù)運(yùn)行過程中,需要保留一定的 id 冗余來應(yīng)對突發(fā)的流量激增。
    • 在性能測試過程中,如果 id 一直很低,吞吐量上不去,需要檢查被測服務(wù)線程/進(jìn)程配置、服務(wù)器系統(tǒng)配置等。
  • wa(I/O wait):CPU 等待 I/O 完成時間百分比。
    • 和 CPU 的處理速度相比,磁盤 I/O 操作是非常慢的。有很多這樣的操作,比如:CPU 在啟動一個磁盤讀寫操作后,需要等待磁盤讀寫操作的結(jié)果。在磁盤讀寫操作完成前,CPU 只能處于空閑狀態(tài)。
    • Linux 系統(tǒng)在計算系統(tǒng)平均負(fù)載時會把 CPU 等待 I/O 操作的時間也計算進(jìn)去,所以在我們看到系統(tǒng)平均負(fù)載過高時,可以通過 wa 來判斷系統(tǒng)的性能瓶頸是不是過多的 I/O 操作造成的。
    • 磁盤、網(wǎng)絡(luò)等 I/O 操作會導(dǎo)致 CPU 的 wa 指標(biāo)提高。通常情況下,網(wǎng)絡(luò) I/O 占用的 wa 資源不會很高,而頻繁的磁盤讀寫會導(dǎo)致 wa 激增。
    • 如果被測服務(wù)不是 I/O 密集型的服務(wù),那需要檢查被測服務(wù)的日志量、數(shù)據(jù)載入頻率等。
    • 如果 wa 高于 10% 則系統(tǒng)開始出現(xiàn)卡頓;若高于 20% 則系統(tǒng)幾乎動不了;若高于 50% 則很可能磁盤出現(xiàn)故障。
  • hi:硬中斷消耗時間百分比。
  • si:軟中斷消耗時間百分比。
    • 硬中斷是外設(shè)對 CPU 的中斷,即外圍硬件發(fā)給 CPU 或者內(nèi)存的異步信號就是硬中斷信號;軟中斷由軟件本身發(fā)給操作系統(tǒng)內(nèi)核的中斷信號。
    • 通常是由硬中斷處理程序或進(jìn)程調(diào)度程序?qū)Σ僮飨到y(tǒng)內(nèi)核的中斷,也就是我們常說的系統(tǒng)調(diào)用(System Call)。
    • 在性能測試過程中,hi 會有一定的 CPU 占用率,但不會太高。對于 I/O 密集型的服務(wù),si 的 CPU 占用率會高一些。
  • st:虛擬機(jī)等待 CPU 資源的時間。
    • 只有 Linux 在作為虛擬機(jī)運(yùn)行時 st 才是有意義的。它表示虛機(jī)等待 CPU 資源的時間(虛機(jī)分到的是虛擬 CPU,當(dāng)需要真實的 CPU 時,可能真實的 CPU 正在運(yùn)行其它虛機(jī)的任務(wù),所以需要等待)。

性能分析思路

  • wa(IO wait)的值過高,表示硬盤存在 I/O 瓶頸。
  • id(idle)值高,表示 CPU 較空閑。
  • 如果 id 值高但系統(tǒng)響應(yīng)慢時,有可能是 CPU 等待分配內(nèi)存,此時應(yīng)加大內(nèi)存容量。
  • 如果 id 值持續(xù)低于 10,那么系統(tǒng)的 CPU 處理能力相對較低,表明系統(tǒng)中最需要解決的資源是 CPU。

案例分析

現(xiàn)象:CPU 的 us 和 sy 不高,但 wa 很高。
如果被測服務(wù)是磁盤 I/O 密集型服務(wù),wa 高屬于正?,F(xiàn)象。但如果不是此類服務(wù),最可能導(dǎo)致 wa 高的原因有兩個:
  • 服務(wù)對磁盤讀寫的業(yè)務(wù)邏輯有問題,讀寫頻率過高,寫入數(shù)據(jù)量過大,如不合理的數(shù)據(jù)載入策略、log 過多等,都有可能導(dǎo)致這種問題。
  • 服務(wù)器內(nèi)存不足,服務(wù)在 swap 分區(qū)不停的換入換出。

LOAD

Linux 的系統(tǒng)負(fù)載指在特定時間間隔內(nèi)(一個 CPU 周期)運(yùn)行隊列中的平均進(jìn)程數(shù)。
(注意:Linux 中的 Load 體現(xiàn)的是整體系統(tǒng)負(fù)載,即 CPU 負(fù)載 + 磁盤負(fù)載 + 網(wǎng)絡(luò)負(fù)載 + 其余外設(shè)負(fù)載,并不能完全等同于 CPU 使用率。而在其余系統(tǒng)如 Unix,Load 還是只代表 CPU 復(fù)雜。)
從服務(wù)器負(fù)載的定義可以看出,服務(wù)器運(yùn)行最理想的狀態(tài)是所有 CPU 核心的運(yùn)行隊列都為 1,即所有活動進(jìn)程都在運(yùn)行,沒有等待。這種狀態(tài)下服務(wù)器運(yùn)行在負(fù)載閾值下。
通常情況下,按照經(jīng)驗值,服務(wù)器的負(fù)載應(yīng)位于閾值的 70%~80%,這樣既能利用服務(wù)器大部分性能,又留有一定的性能冗余應(yīng)對流量增長。
查看系統(tǒng)負(fù)載閾值的命令如下:

Linux 提供了很多查看系統(tǒng)負(fù)載的命令,最常用的是 top 和 uptime。
top 和 uptime 針對負(fù)載的輸出內(nèi)容相同,都是系統(tǒng)最近 1 分鐘、5 分鐘、15 分鐘的負(fù)載均值:
這三個數(shù)值的使用方法和 CPU 核數(shù)相關(guān),首先確認(rèn) CPU 物理總核數(shù):
  • /proc/cpuinfo 中的 processors 的最大值不一定是 CPU 的核數(shù),有可能該 CPU 支持超線程技術(shù),從而 processors 是物理核數(shù)的 2 倍。
  • 這里我們需要準(zhǔn)確的核數(shù),具體方法為:找到 /proc/cpuinfo 文件中所有的 physical id 后的數(shù)值,取得最大的數(shù)值,加一后就是實際的 CPU 個數(shù)。然后查找任意一個 processors 下的 cpu cores,即是該顆 CPU 的核數(shù),實際 CPU 個數(shù)乘以核數(shù)即為 CPU 的物理總核數(shù)。
示例:
[root@localhost home]# cat /proc/cpuinfo |grep "physical id"
physical id     : 0
physical id     : 0
[root@localhost home]# cat /proc/cpuinfo |grep "cpu cores"
cpu cores       : 2
cpu cores       : 2
物理 CPU 個數(shù)為 0+1=1 個,每個 CPU 的核數(shù)為 2 個,所以總的物理核數(shù)為 2x1=2。
計算結(jié)果說明該機(jī)器的在單位時間內(nèi)可以處理的進(jìn)程數(shù)是 2 個,如果單位時間內(nèi)進(jìn)程數(shù)超過 2 個,就會出現(xiàn)擁堵的情況,load 就會持續(xù)增高,增高到一定程度,就會出現(xiàn)系統(tǒng)崩潰等異常情況。

在性能測試過程中,系統(tǒng)負(fù)載是評價整個系統(tǒng)運(yùn)行狀況最重要的指標(biāo)之一。通常情況下:
  • 負(fù)載測試時:系統(tǒng)負(fù)載應(yīng)接近但不能超過閾值。
  • 并發(fā)測試時:系統(tǒng)負(fù)載最高不能超過閾值的 80%。
  • 穩(wěn)定性測試時:系統(tǒng)負(fù)載應(yīng)在閾值的 50% 左右。

機(jī)器針對突發(fā)情況的處理
  • 如果 1 分鐘 load 很高,5 分鐘 load 較高,15 分鐘 load 起伏不大的情況下,說明該次高 load 為突發(fā)情況,可以容忍。
  • 如果高 load 持續(xù),導(dǎo)致 5 分鐘和 15 分鐘 load 都已經(jīng)超過報警值,這時候需要考慮進(jìn)行處理。
  • 如果 15 分鐘 load 高于 1 分鐘 load,說明高 load 情況已經(jīng)得到緩解。

內(nèi)存

性能測試過程中對內(nèi)存監(jiān)控的主要目的是檢查被測服務(wù)所占用內(nèi)存的波動情況。

top 參數(shù)詳解

在 Linux 系統(tǒng)中有多個命令可以獲取指定進(jìn)程的內(nèi)存使用情況,最常用的是 top 命令,如下圖所示:
  • VIRT:進(jìn)程所使用的虛擬內(nèi)存的總數(shù)。它包括所有的代碼,數(shù)據(jù)和共享庫,加上已換出的頁面,所有已申請的總內(nèi)存空間。
  • RES:進(jìn)程正在使用的沒有交換的物理內(nèi)存(棧、堆)。申請內(nèi)存后該內(nèi)存段已被重新賦值。
  • SHR:進(jìn)程使用共享內(nèi)存的總數(shù)。該數(shù)值只是反映可能與其它進(jìn)程共享的內(nèi)存,不代表這段內(nèi)存當(dāng)前正被其他進(jìn)程使用。
  • SWAP:進(jìn)程使用的虛擬內(nèi)存中被換出的大小。交換的是已經(jīng)申請但沒有使用的空間(包括棧、堆、共享內(nèi)存)。
  • DATA:進(jìn)程除可執(zhí)行代碼以外的物理內(nèi)存總量,即進(jìn)程棧、堆申請的總空間。
從上面的解釋可以看出,測試過程中主要監(jiān)控 RES 和 VIRT。對于使用了共享內(nèi)存的多進(jìn)程架構(gòu)服務(wù),還需要監(jiān)控 SHR。

free 參數(shù)詳解

free 命令顯示系統(tǒng)內(nèi)存的使用情況,包括物理內(nèi)存、交換內(nèi)存(swap)和內(nèi)核緩沖區(qū)內(nèi)存。如果加上 -h 選項(控制顯示單位),輸出的結(jié)果會友好很多:
有時我們需要持續(xù)的觀察內(nèi)存的狀況,此時可以使用 -s 選項并指定間隔的秒數(shù):如 free -h -s 3 表示每隔 3 秒輸出一次內(nèi)存的使用情況,直到按下 ctrl + c。
  • Mem 行:物理內(nèi)存的使用情況。
  • Swap 行:交換空間的使用情況。
    • swap space 是磁盤上的一塊區(qū)域,可以是一個分區(qū),也可以是一個文件,所以具體的實現(xiàn)可以是 swap 分區(qū)也可以是 swap 文件。當(dāng)系統(tǒng)物理內(nèi)存吃緊時,Linux 會將內(nèi)存中不常訪問的數(shù)據(jù)保存到 swap 上,這樣系統(tǒng)就有更多的物理內(nèi)存為各個進(jìn)程服務(wù),而當(dāng)系統(tǒng)需要訪問 swap 上存儲的內(nèi)容時,再將 swap 上的數(shù)據(jù)加載到內(nèi)存中,這就是常說的換出和換入。
    • 交換空間可以在一定程度上緩解內(nèi)存不足的情況,但是它需要讀寫磁盤數(shù)據(jù),所以性能不是很高。因此當(dāng)交換空間內(nèi)存開始使用,則表明內(nèi)存嚴(yán)重不足。
    • 如果系統(tǒng)內(nèi)存充足或是做性能壓測的機(jī)器,可以使用 swapoff -a 關(guān)閉交換空間,或在 /etc/sysctl.conf 文件中設(shè)置 swappiness 值。如果系統(tǒng)內(nèi)存不富余,則需要根據(jù)物理內(nèi)存的大小來設(shè)置交換空間的大小,具體的策略網(wǎng)上有很豐富的資料。
  • total 列:系統(tǒng)總的可用物理內(nèi)存和交換空間大小。
  • used 列:已經(jīng)被使用的物理內(nèi)存和交換空間大小。
  • free 列:還有多少物理內(nèi)存和交換空間可用使用(真正尚未被使用的物理內(nèi)存數(shù)量)。
    • 在吞吐量固定的前提下,如果內(nèi)存持續(xù)上漲,那么很有可能是被測服務(wù)存在明顯的內(nèi)存泄漏,需要使用 valgrind 等內(nèi)存檢查工具進(jìn)行定位。
  • shared 列:被共享使用的物理內(nèi)存大小。
  • buffer/cache 列:被 buffer 和 cache 使用了的物理內(nèi)存大小。
    • Linux 內(nèi)核為了提升磁盤操作的性能,會消耗一部分空閑內(nèi)存去緩存磁盤數(shù)據(jù),就是 buffer 和 cache。
    • 如果給所有應(yīng)用分配足夠內(nèi)存后,物理內(nèi)存還有剩余,linux 會盡量再利用這些空閑內(nèi)存,以提高整體 I/O 效率,其方法是把這部分剩余內(nèi)存再劃分為 cache 及 buffer 兩部分加以利用。
    • 所以,空閑物理內(nèi)存不多,不一定表示系統(tǒng)運(yùn)行狀態(tài)很差,因為內(nèi)存的 cache 及 buffer 部分可以隨時被重用,在某種意義上,這兩部分內(nèi)存也可以看作是額外的空閑內(nèi)存。
  • available 列:還可以被應(yīng)用程序使用的物理內(nèi)存大小。
    • 從應(yīng)用程序的角度來說,available = free + buffer + cache。請注意,這只是一個很理想的計算方式,實際中的數(shù)據(jù)往往有較大的誤差。

釋放緩存內(nèi)存
方式一:手動釋放緩存內(nèi)存
snyc
echo 3 > /proc/sys/vm/drop_caches
free -m
方式二:修改 linux 配置自動釋放
/proc/sys/vm/drop_caches 這個值的 0 改為 1

磁盤 I/O

性能測試過程中,如果被測服務(wù)對磁盤讀寫過于頻繁,會導(dǎo)致大量請求處于 I/O 等待的狀態(tài),系統(tǒng)負(fù)載升高,響應(yīng)時間變長,吞吐量下降。
iostat 參數(shù)詳解
Linux 下可以用 iostat 命令來監(jiān)控磁盤狀態(tài)。
iostat -d 2 10 表示每 2 秒統(tǒng)計一次基礎(chǔ)數(shù)據(jù),統(tǒng)計 10 次:
  • tps:該設(shè)備每秒的傳輸次數(shù)。“一次傳輸”意思是“一次 I/O 請求”。多個邏輯請求可能會被合并為“一次 I/O 請求”。“一次傳輸”請求的大小是未知的。
  • kB_read/s:每秒從設(shè)備(driveexpressed)讀取的數(shù)據(jù)量,單位為 Kilobytes。
  • kB_wrtn/s:每秒向設(shè)備(driveexpressed)寫入的數(shù)據(jù)量,單位為 Kilobytes。
  • kB_read:讀取的總數(shù)據(jù)量,單位為 Kilobytes。
  • kB_wrtn:寫入的總數(shù)量數(shù)據(jù)量,單位為 Kilobytes。
從 iostat -d 的輸出中,能夠獲得系統(tǒng)運(yùn)行最基本的統(tǒng)計數(shù)據(jù)。但對于性能測試來說,這些數(shù)據(jù)不能提供更多的信息。需要加上 -x 參數(shù)。
iostat -x 參數(shù)詳解
如 iostat -x 2 10 表示每 2 秒統(tǒng)計一次更詳細(xì)數(shù)據(jù),統(tǒng)計 10 次:
  • rrqm/s:每秒這個設(shè)備相關(guān)的讀取請求有多少被 Merge 了。
    • 當(dāng)系統(tǒng)調(diào)用需要讀取數(shù)據(jù)的時候,VFS 將請求發(fā)到各個 FS,如果 FS 發(fā)現(xiàn)不同的讀取請求讀取的是相同 Block 的數(shù)據(jù),F(xiàn)S 會將這個請求合并 Merge。
  • wrqm/s:每秒這個設(shè)備相關(guān)的寫入請求有多少被 Merge 了。
  • await:每一個 I/O 請求的處理的平均時間(單位:毫秒)。
    • await 的大小一般取決于服務(wù)時間(svtcm)以及 I/O 隊列的長度和 I/O 請求的發(fā)出模式。假設(shè) svtcm 比較接近 await,說明 I/O 差點沒有等待時間。
    • 假設(shè) await 遠(yuǎn)大于 svctm(如大于 5),就要考慮 I/O 有壓力瓶頸,說明 I/O 隊列太長,應(yīng)用得到的響應(yīng)時間變慢。假設(shè)響應(yīng)時間超過了用戶能夠容許的范圍,這時可以考慮更換更快的磁盤。
  • svctm:I/O 平均服務(wù)時間。
  • %util:在統(tǒng)計時間內(nèi)有百分之多少用于 I/O 操作。
    • 例如,如果統(tǒng)計間隔 1 秒,該設(shè)備有 0.8 秒在處理 I/O,而 0.2 秒閑置,那么該設(shè)備的 %util = 0.8/1 = 80%,該參數(shù)暗示了設(shè)備的繁忙程度。
    • %util 接近100% 表明 I/O 請求太多,I/O 系統(tǒng)繁忙,磁盤可能存在瓶頸。
iostat -x 完整參數(shù)如下:

- rrqm/s: 每秒進(jìn)行 merge 的讀操作數(shù)目。即 delta(rerge)/s
- wrqm/s: 每秒進(jìn)行 merge 的寫操作數(shù)目。即 delta(wmerge)/s
- t/s: 每秒完成的讀 I/O 設(shè)備次數(shù)。即 delta(rioVs
- w/s: 每秒完成的寫 1/O 設(shè)備次數(shù)。即 delta(wio)/s
- rsec/s: 每秒讀扇區(qū)數(shù)。即 delta(rsect)/s
- ws0c/s: 每秒寫扇區(qū)數(shù)。即 deita(wsect)/s
- rkB/s: 每秒讀 K 字節(jié)數(shù)。是 rsect/s 的一半,因為每扇區(qū)大小為 512 字節(jié)。(需要計算) 
- wkB/s: 每秒寫 K 字節(jié)數(shù)。是 wsect/s 的一半。(需要計算) 
- avgrq+sz: 平均每次設(shè)備 I/O 操作的數(shù)據(jù)大?。ㄉ葏^(qū))。delta(rsect+wsect)/delta(rio+wio) 
- avgqu-sz: 平均I/O隊列長度,即delta(avea)/s/1000(因為 aveq 的單位為毫秒)。 
- await: 平均每次設(shè)備 I/O 操作的等待時間(毫秒)。即 delta(ruse+wuse)/delta(rio+wio) 
- svctm: 平均每次設(shè)備 I/O 操作的服務(wù)時間(毫秒)。即 delta(use)/delta(rio+wio) 
- %util:一秒中有百分之多少的時間用于 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000(因為 use 的單位為毫秒)

網(wǎng)絡(luò)

性能測試中網(wǎng)絡(luò)監(jiān)控主要包括網(wǎng)絡(luò)流量、網(wǎng)絡(luò)連接狀態(tài)的監(jiān)控。

網(wǎng)絡(luò)流量監(jiān)控

方法很多,網(wǎng)上有很多 shell 腳本。也可以使用 nethogs 命令。該命令與 top 類似,是一個實時交互的命令,運(yùn)行界面如下:
在后臺服務(wù)性能測試中,對于返回文本結(jié)果的服務(wù),并不需要太多關(guān)注在流量方面。

理解帶寬
針對一些特定的應(yīng)用,比如直播或網(wǎng)盤(文件上傳下載),帶寬瓶頸也是一個出現(xiàn)頻率較高的場景。
服務(wù)端的帶寬分為上行(out)和下行(in)帶寬(分別對應(yīng)客戶端的下載和上傳)。
  • 看視頻看新聞使用帶寬:客戶端的下載、服務(wù)端的上行帶寬。
  • 服務(wù)端接收客戶端的數(shù)據(jù)使用帶寬:客戶端的上傳、服務(wù)端的下行帶寬。
一個 Web 服務(wù)器如各類新聞網(wǎng)站通常需要更多的服務(wù)端上行(out)帶寬;而郵件服務(wù)器、網(wǎng)盤服務(wù)器等則通常需要更多的服務(wù)端下行帶寬(in)。
理解帶寬速率公式
  • 1 Mb/s 帶寬速度為 128 KB/s(1024Kb / 8KB)
  • 100 Mb/s 帶寬速度為 12.5 Mb/s(考慮網(wǎng)絡(luò)損耗通常按 10M/s 或 1280KB/s 算)
示例:5000 萬像素手機(jī)拍一張照片,照片大小約 20MB,在下述帶寬下需要耗時:
  • 10M 帶寬約 20 秒:耗時 = 流量 / 速率 = 20MB / (10Mb/8) = 20 / 1.25 = 16 秒(按 1MB/s=128KB/s 速度算即 20 秒)
  • 100M 帶寬約 2 秒:耗時 = 流量 / 速率 = 20MB / (100Mb/8) = 20 / 12.5 = 1.6 秒(按 10MB/s=128KB/s 速度算即 2 秒)
  • 1000M 帶寬約 0.2 秒:耗時 = 流量 / 速率 = 20MB / (1000Mb/8) = 20 / 125 = 0.16 秒(按 100MB/s=128KB/s 速度算即 0.2 秒)

案例分析
現(xiàn)象:從監(jiān)控圖表可以看出,當(dāng)前的網(wǎng)絡(luò)流量已經(jīng)基本將網(wǎng)絡(luò)帶寬占滿,因此網(wǎng)絡(luò)存在瓶頸。
解決方案:
  • 硬件解決:增加帶寬(帶寬便宜)。
  • 軟件解決:分析對應(yīng)業(yè)務(wù)操作的數(shù)據(jù)傳送內(nèi)容是否可精簡;是否可以異步傳送。

網(wǎng)絡(luò)連接狀態(tài)監(jiān)控

性能測試中對網(wǎng)絡(luò)的監(jiān)控主要是監(jiān)控網(wǎng)絡(luò)連接狀態(tài)的變化和異常。
  • 對于使用 TCP 協(xié)議的服務(wù),需要監(jiān)控服務(wù)已建立連接的變化情況(即 ESTABLISHED 狀態(tài)的 TCP 連接)。
  • 對于 HTTP 協(xié)議的服務(wù),需要監(jiān)控被測服務(wù)對應(yīng)進(jìn)程的網(wǎng)絡(luò)緩沖區(qū)的狀態(tài)、TIME_WAIT 狀態(tài)的連接數(shù)等。

Linux 自帶的很多命令如 netstat、ss 都支持如上功能。
下圖是 netstat 對指定 pid 進(jìn)程的監(jiān)控結(jié)果:
完整命令輸出:

數(shù)據(jù)庫

慢查詢

更具體的慢 SQL 分析優(yōu)化,可參見《MySQL 慢 SQL & 優(yōu)化方案》。
如 MySQL 資源出現(xiàn)瓶頸,首先找慢查詢(超過自定義的執(zhí)行時間閾值的 SQL)。
1)通過 SQL 語句定位到慢查詢?nèi)罩镜乃谀夸洠缓蟛榭慈罩尽?/span>
show variables like "slow%";
2)慢查詢?nèi)罩驹诓樵兘Y(jié)束以后才紀(jì)錄,所以在應(yīng)用反映執(zhí)行效率出現(xiàn)問題時,查詢慢查詢?nèi)罩静⒉荒芏ㄎ粏栴}。這時可以使用show processlist命令查看當(dāng)前 MySQL 正在進(jìn)行的線程狀態(tài),可以實時地查看 SQL 的執(zhí)行情況。
示例:
mysql -uroot -p123456 -h127.0.0.1 -p3307 -e "show full processlist" |grep dbname |grep -v NULL
3)找到慢查詢 SQL 后可以用執(zhí)行計劃(explain)進(jìn)行分析(或反饋給 DBA 和開發(fā)處理)。推薦最簡單的排查方式,步驟如下:
  1. 分析 SQL 是否加載了不必要的字段/數(shù)據(jù)。
  2. 分析 SQL 是否命中索引。
  3. 如果 SQL 很復(fù)雜,優(yōu)化 SQL 結(jié)構(gòu)。
  4. 如果表數(shù)據(jù)量太大,考慮分表。
  5. ……

連接數(shù)

數(shù)據(jù)庫連接池的使用率
  • 當(dāng)數(shù)據(jù)庫連接池被占滿時,如果有新的 SQL 語句要執(zhí)行,只能排隊等待,等待連接池中的連接被釋放(等待之前的 SQL 語句執(zhí)行完成)。
  • 如果監(jiān)控發(fā)現(xiàn)數(shù)據(jù)庫連接池的使用率過高,甚至是經(jīng)常出現(xiàn)排隊的情況,則需要進(jìn)行調(diào)優(yōu)。
查看/設(shè)置最大連接數(shù)
-- 查看最大連接數(shù)
-- 查看最大連接數(shù)
mysql> show variables like '%max_connection%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| extra_max_connections |       |
| max_connections       | 2512  |
+-----------------------+-------+
2 rows in set (0.00 sec)

-- 重新設(shè)置最大連接數(shù)
set global max_connections=1000;
在/etc/my.cnf 里面設(shè)置數(shù)據(jù)庫的最大連接數(shù)
[mysqld]
max_connections = 1000
查看當(dāng)前連接數(shù)
mysql> show status like  'Threads%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 32    |
| Threads_connected | 10    |
| Threads_created   | 50    |
| Threads_rejected  | 0     |
| Threads_running   | 1     |
+-------------------+-------+
5 rows in set (0.00 sec)
  • Threads_connected:表示當(dāng)前連接數(shù)。跟 show processlist 結(jié)果相同。準(zhǔn)確的來說,Threads_running 代表的是當(dāng)前并發(fā)數(shù)。
  • Threads_running:表示激活的連接數(shù)。一般遠(yuǎn)低于 connected 數(shù)值。
  • Threads_created:表示創(chuàng)建過的線程數(shù)。
    • 如果我們在 MySQL 服務(wù)器配置文件中設(shè)置了 thread_cache_size,那么當(dāng)客戶端斷開之后,服務(wù)器處理此客戶的線程將會緩存起來以響應(yīng)下一個客戶而不是銷毀(前提是緩存數(shù)未達(dá)上限)。
    • 如果發(fā)現(xiàn) Threads_created 值過大的話,表明 MySQL 服務(wù)器一直在創(chuàng)建線程,這也是比較耗資源,因此可以適當(dāng)增加配置文件中 thread_cache_size 值。
查詢服務(wù)器 thread_cache_size 的值
mysql> show variables like 'thread_cache_size';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| thread_cache_size | 100   |
+-------------------+-------+
1 row in set (0.00 sec)

詳見《MySQL 事務(wù)和鎖》。

緩存命中率

  1. 通常,SQL 查詢是從磁盤中的數(shù)據(jù)庫文件中讀取數(shù)據(jù)。
  2. 若當(dāng)某一個 SQL 查詢語句之前執(zhí)行過,則該 SQL 語句及查詢結(jié)果都會被緩存下來,下次再查詢相同的 SQL 語句時,就會直接從數(shù)據(jù)庫緩存中讀取。(注意,MySQL 8 開始已廢棄查詢緩存功能。)
監(jiān)控點
  • 業(yè)務(wù)執(zhí)行過程中 SQL 查詢時的緩存命中率(查詢語句讀取緩存的次數(shù)占總查詢次數(shù)的比例)。
  • 如果緩存命中率過低,需要優(yōu)化對應(yīng)的代碼和 SQL 查詢語句,以提高緩存命中率。

案例分析

測試結(jié)果分析
結(jié)論:從目前的測試結(jié)果來看(如下圖所示),性能存在問題。
現(xiàn)象:并發(fā)數(shù)達(dá)到 50 時的 TPS 為 52,此時雖然響應(yīng)時間為 4.4s(小于需求的 5s),但是數(shù)據(jù)庫服務(wù)器的 CPU 使用率非常高(接近 100%),因此需要重點關(guān)注數(shù)據(jù)庫的調(diào)優(yōu)分析。
排查過程
  1. 使用 top 命令觀察,確定是 mysqld 導(dǎo)致還是其他原因。
    • CPU 分為用戶 CPU 和內(nèi)核 CPU。綜合其他的各項資源指標(biāo)來分析,發(fā)現(xiàn)內(nèi)存、磁盤IO、網(wǎng)絡(luò)等指標(biāo)無任何異常,因此判斷此處不是內(nèi)核 CPU 占用高,主要原因是用戶進(jìn)程占用的 CPU 高。
    • 確認(rèn)目前 CPU 占用高的為 mysqld 進(jìn)程。
  2. 分析數(shù)據(jù)庫服務(wù)器 CPU 高的可能原因:慢 SQL、SQL 語句過多、連接數(shù)過多等。
    • 使用show full processlist查看當(dāng)前數(shù)據(jù)庫中正在執(zhí)行的 SQL 語句及連接池的狀態(tài),發(fā)現(xiàn)大量 SQL 在等待執(zhí)行。
    • 再結(jié)合操作過程中的系統(tǒng)日志進(jìn)行分析,發(fā)現(xiàn)每進(jìn)入一次商城首頁,就需要在數(shù)據(jù)庫中執(zhí)行 19 條查詢 SQL。
    • 查看慢查詢?nèi)罩荆纯词欠裼谐^預(yù)期指標(biāo)的 SQL 語句,并分析排查:看看執(zhí)行計劃是否準(zhǔn)確、索引是否缺失、數(shù)據(jù)量是否太大等。
    • 目前案例經(jīng)過慢查詢?nèi)罩镜姆治觯创嬖诼樵儭?/span>
    • 確認(rèn)是否存在慢 SQL:
    • 確認(rèn)是否 SQL 語句過多或連接數(shù)過多:
解決方案
  • 硬件解決:增加 CPU。
  • 軟件解決:為減少一次性加載過多 SQL,可考慮使用分批次、異步加載的方式(展示到什么位置,就查詢什么位置的數(shù)據(jù))。

JAVA 應(yīng)用

JVM

JVM 簡介
JVM(JAVA Virtual Machine):虛擬出來的空間,專門供 JAVA 程序運(yùn)行。

JVM 內(nèi)存
重點關(guān)注:堆區(qū)(動態(tài)變化)
所有的對象在初始化都會申請堆區(qū)的空間,如果已申請的空間在使用結(jié)束后沒有及時地釋放,那么該空間就會被占用,即內(nèi)存泄漏。
監(jiān)控點:因此在測試時,需要關(guān)注堆區(qū)的空間是否持續(xù)上升而沒有下降。

案例分析
現(xiàn)象:堆內(nèi)存使用是持續(xù)升高,無法降低到之前的水平。
解決方案:找到內(nèi)存泄漏的代碼,并優(yōu)化代碼。

垃圾回收機(jī)制

什么是垃圾回收機(jī)制
  • 垃圾回收指將內(nèi)存中已申請并使用完成的那部分內(nèi)存空間回收,供新申請使用。
  • 垃圾回收機(jī)制都是針對堆區(qū)的內(nèi)存進(jìn)行的。
監(jiān)控點
  • 系統(tǒng)在做垃圾回收時,不能夠處理任何用戶業(yè)務(wù)的。如果垃圾回收過于頻繁,導(dǎo)致系統(tǒng)業(yè)務(wù)處理能力下降。
  • 由于 Full GC 內(nèi)存比較大,垃圾回收一次時間比較長,那么這段時間內(nèi)都不能處理業(yè)務(wù),對系統(tǒng)影響比較大,因此我們需要關(guān)注Full GC 頻率。

垃圾回收機(jī)制的運(yùn)行步驟如下:
  1. 新程序執(zhí)行時需要先申請內(nèi)存空間,會先從年輕代中申請。
  2. 在年輕代滿了以后,就會進(jìn)行垃圾回收Young GC。
  3. 回收時檢查年輕代中的內(nèi)存,是否還在使用。還在使用的部分會移存到生存區(qū) 2 中;不使用的部分則釋放,此時年輕代內(nèi)存空間被清空。
  4. 新程序執(zhí)行申請內(nèi)存空間,再從年輕代申請。
  5. 年輕代又滿了,就會進(jìn)行垃圾回收Young GC。還在使用的內(nèi)存移存到生存區(qū) 1 中,并把生存區(qū) 2 中的內(nèi)存也都存到生存區(qū) 1 中。此時就會清空年輕代和生存區(qū) 2。
  6. 循環(huán)上述 1-5 步。
  7. 如果部分內(nèi)存在生存區(qū)中存活很久(內(nèi)存在生存區(qū)中移動了 10 次左右),則將這部分內(nèi)存放入到老年代中。
  8. 循環(huán)上述 1-7 步,直到老年代內(nèi)存空間全部占滿,此時就要進(jìn)行垃圾回收Full GC。


  作者 |  Juno3550

來源 |  cnblogs.com/juno3550/p/15212546.html


加鋒哥微信: java1239  
圍觀鋒哥朋友圈,天天推送Java干貨!

瀏覽 53
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日韩在线免费| 搡bbbb| 久久国产热| 国产99久久久| 美女白嫩嫩大BBB欣赏| 欧美成人在线观看视频| 涩婷婷| 成人三级AV在线| 91成人免费在线观看| 日本一级黄| 日本中文字幕免费| 亚洲无码一区二区在线观看| 国产熟妇| 日本三级久久| 2019天天操| 成人a片视频| 亚洲小说区图片区| 操骚逼视频| 少妇熟女视频一区二区三区| 在线黄色视频网站| 天堂在线www| 91免费视频在线| 国产精品色在线回看| 闺蜜AV| 91在线无码精品在线看| 看毛片网址| 影音先锋久久| 亚洲无码手机在线| 高潮喷水视频| 伊人久久电影| 做爱激情视频网站| 免费观看一级黄片| 亚洲视频网站在线观看| 亚洲AV无码成人精品区国产| 被男友内S~高H文| 成人精品一区二区三区电影| 午夜av在线免费观看| av资源免费观看| 欧美亚洲视频| 伊人综合成人网| 亚洲高清超级无码在线视频观看| 欧美国产日本| 毛片毛片毛片| 色婷婷AV在线| 精品亚洲无码视频| 五月AV| 欧美老妇性猛交| 九九99精品视频| 天天免费视频| 国产91麻豆视频| AV三级无码| 安微妇搡BBBB搡BBBB日| 视频一区二区三| 久久精品视频18| 日韩无码毛片| 久肏| 亚洲欧洲AV| 人人看,人人摸| 亚洲色激情| 无码日韩av| 日逼视频| 超碰中文字幕| 成人精品免费视频| 成人国产在线观看| 亚洲精品成a人在线观看| 国产AV中文| 天天日天天射天天操| 欧美一区免费| 精品国产AV无码一区二区三区| 日韩电影免费在线观看| 人人操碰人人| 成人大战香蕉最新视频| 日韩三级视频| 无码免费观看视频| 色婷婷AV国产精品| 九色国产视频| 欧美日韩国产在线播放| 韩国三级HD久久精品HD| 天天无码视频| 超碰人人网| 男人天堂视频在线| 操老骚逼视频| 无遮挡动态图| 一区二区三区小视频| 国产欧美欧洲| 竹菊影视一区二区三区| 亚洲猛男操逼欧美国产视频| 无码网址| 欧美成人精品无码| 噜噜视频| 亚洲在线播放| 久久久久三级片| 中文字幕一区二区三区免费2023 | 亚洲成a人无码| 91羞射短视频在线观看| 长泽梓黑人初解禁BDD07| 久久久成人电影| 国产精品久久777777| 97资源在线| 天天激情| 91综合娱乐| 亚洲成人三级片| www.第四色| 日韩在线成人| 中文无码一区| 国产成人无码在线| 欧美日韩精品一区二区| 蜜芽成人在线| 国产一级AV国产免费| 日本AⅤ在线观看| 大香蕉精品在线视频| 2025精品视频| 伊人国产女| 欧美另类色| 又黄又爽无遮挡| 国产一级婬乱片AV片AAA毛片| 国产TS变态重口人妖| 青青草无码在线| 熟妇一区二区| 亚洲国产成人91精品| 山西真实国产乱子伦| 无码日韩人妻精品久久蜜桃| 激情人妻av| 大香蕉1024| 欧美日韩色| 精品无码三级在线观看视频| 艹逼免费视频| 无码精品久久| 成人片在线| 中文字幕人妻一区| 99久久婷婷国产综合精品hsex,亚| 国产一二三四区| av不卡在线| 99久久精品国产一区色| 国产91在线播放| av在线精品| 日日精品| 亚洲中文av| 99热国产| 亚洲第一狼人综合网| 怡春院熟女精品AV| 久久久精品久久| 操美女的逼| 亚洲国产高清国产精品| 国产精品人人| 日韩高清无码观看| 日韩欧美在线中文字幕| 国产成人免费看| 国产视频在线免费观看| 欧美伦妇AAAAAA片| 欧美成人免费电影| 91人人妻人人澡人人爽| 亚洲91精品| 999无码| 伊人在线视频| gogogo视频在线观看黑人| 中文AV第一页| 超碰91免费在线观看| 韩国成人免费无码免费视频| 日韩一级在线免费观看| 免费国产成人看片在线| 久久婷婷六月| 91丨熟女丨对白| 国产在线观看无码免费视频| 波多野结衣在线无码| 在线观看91| 亚洲高清免费| 国产欧美在线综合| 日韩中文无码一级A片| 亚洲黄色视频在线免费观看| 国产午夜精品一区二区三区四区| 亚洲砖区区免费| 伊人影院久久| 中国老女人操逼视频| 国产jk在线观看| 免费无码成人片在线观看在线| 91青青草| 18sav| 成人中文字幕网站| 999热视频| 韩国三级HD中文字幕的背景音乐| 日本三级黄色| 无码人妻精品一区二区三千菊电影| 亚洲综合图区| 久久久久成人电影| 欧美一二三区黄色免费视屏| 精品乱子伦一区二区三区毛| 狠狠做深爱婷婷久久综合一区 | 欧美人与禽乱婬A片| 人人色人人摸| 亚洲AV秘一区二区色盗战流出| 日本家庭乱伦视频| 日韩无码精品一区| 春色AV| 2025国产成人精品一区| 久久久久国产视频| 免费黄网站| 俺来也俺去也www色| 翔田千里一区二区| 美女一级片| 日韩字幕| 91日韩无码| 黄色一级视频在线观看| 天天日夜夜草| 国产XXXXX| 做爱网站| 操逼视频国产91| 欧美性爱AAA| 国产精品视频在线免费观看| 乱伦无码视频| 亚洲成人三级片| 亚洲福利女神成人福利| 99热在线观看精品| 无码9999| 91丨熟女丨对白| 午夜在线观看视频18| 亚洲av影院| 日韩激情无码视频精选| av一区二区在线观看| 人人干人人上| 日韩人妻精品无码| 天天日天天草| 人妻少妇中文字幕久久牛牛| 国产视频无码在线| 九九九九色| 欧美一级片在线| 中文有码| 好爽~要尿了~要喷了~同桌| 日本黄色视频大全| 欧美另类色| 成人无码区免费AV毛片| 黄频美女日本免费| 人人操人人看人人| 黄色电影视频网站| 熟女人妻人妻の视频| 大香蕉伊人网| 成人才看的在线视频| 色老板在线观看视频| 91在线| 97精品人妻一区二区三区| 国际精品久久久| 国产精品人妻无码久久久郑州天气网 | 操逼在线视频| 五月花在线视频| 在线观看18s| 中文字幕av一区二区| 国产午夜成人福利在线| 亚洲国产成人va| 亚州视频在线观看| 一区二区三区四区视频在线 | 肏屄视频在线看| 亚洲无码色| 一区二区三区毛片| 99精品偷自拍| 另类无码| 麻豆AV在线观看| 人人色人人| 做爱视频91| 囯产一级a一级a免费视频| 欧美成人网站在线| 国产视频久久| 日本少妇BBw| 日韩乱伦中文字幕| 亚洲AV成人片无码网站网蜜柚| 婷婷色色五月天图片| 91婷婷射| 91麻豆精品国产| 亚洲精品秘一区二区三区蜜桃久 | 一本到在线观看午夜剧场| 久久久久女人精品毛片九一| 亚洲人妻系列| 精品免费国产一区二区三区四区的使用方法 | 国内老熟妇对白HDXXXX| 外国成人视频| 欧美精品久久久久久久久| 久草精品视频| 伊人中文字幕| 亚洲福利网| 一区二区无码高清| 色五月激情五月| 巨爆乳肉感一区二区三区视频| 五月天一区二区三区| 国产成人av网站| 日韩人妻无码一区二区三区七区| 视色AV| 国产精品久久久久久久久夜色| 中文字幕在线无码| 狠狠做深爱婷婷久久综合一区| 香蕉AV777XXX色综合一区 | 色婷在线| 在线免费观看黄色小视频| 99热最新| 无码三级av| 成人黄片免费| 日本操B久久| 波多野结衣视频免费在线观看| 国产黄片免费在线观看| 熟女视频国产| 樱桃性爱视频| 亚洲精品97久久中文字幕| 91视频美女内射| 一级少女免费播放电视剧韩剧TV| 国产伦乱| 欧美久草蜜桃视频| 人人插人人射| 黄色精品视频| 中文字幕无码一区二区三区一本久 | 91视频网站免费观看| www.亚洲精品| 国产精品熟女| 亚洲一级性爱| 神马午夜51| 无码视频一二三区| 麻豆高清无码| 日韩美女免费性爱视频| 国产avwww| 大香蕉性爱| 丁香婷婷久久久综合精品国产 | 亚洲无码视频免费观看| av老鸭窝| 国产精品一区二区性色AV| www.青青草视频| 日本一区二区视频在线| 91在线无码精品秘入口| 久久久久久久久成人| 日韩A√| 另类老妇性BBwBBw| 手机看片国产| 性无码一区二区三区| 91在线无码精品秘软件| av在线资源观看| 国产特級黃色大片| 久草国产在线视频| 久久国产av| 日本性爱网址| 日本五十路熟女视频| 九九久久影院| 日韩少妇无码视频| 亚洲秘无码一区二区三区观看| 久久AV无码| 欧美成人一级A片| 亚洲国产成人无码| 91麻豆福利视频| 欧美日韩国产尤物主播精品| 亚洲AV无码成人精品区在线欢看| 激情视频网| 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 在线观看AV无码| 欧美老妇操逼视频| 91久久精品无码一区二区三区| 国产中文字幕免费| 亚洲天堂无码视频| 中文字幕精品三区无码| www.17c嫩嫩草色蜜桃网站| 日韩综合不卡| 日韩人妻斩| 黑人干亚洲人| 午夜久久电影| 午夜无码鲁丝片午夜精品| 91精品国产一区二区| 国产一级18片视频| 欧美成人三级在线播放| 在线视频第一页| 先锋资源日韩| 国产成人精品视频免费| 精品国产AV色一区二区深夜久久 | 91久久性奴调教| 国产一级婬片A片免费无成人黑豆 国产真实露脸乱子伦对白高清视频 | 亚洲免费播放| 女人BBBB| 一道本一区| 中文字幕成人免费视频| 91在线日韩| 国产av电影网| 亚洲无码制服| 狠狠色噜噜狠狠狠7777米奇网| 农村一级婬片A片AAA毛片古装 | 久久99高清| 激情动态视频| www.有码99| 欧美黑吊大战白妞欧美大片| 国产成人三级片在线观看| 日韩人妻视频| 国产成人精品一区二区三区四区| 99色网站| 成人才看的在线视频| 韩日一区| 亚洲欧美日韩成人| 日韩欧美成人电影| 99无码精品| 国产高清不卡| 伊人逼逼| AV无码在线观看| 青草无码| 亚洲黄色AV| 日韩少妇无码视频| www.色999| 91丨九色丨熟女新版| 亚洲一级免费免费在线观看| 亚洲A在线观看| 色色五月天网站| AV三级片在线观看| 国产精品乱码一区二区三区| 99久久久久久| 国产AV二区| 大香蕉69| 婷婷五月天啪啪| 91人妻无码| 在线观看成人18| 亚洲香蕉视频| 午夜AV在线免费观看| 日本乱伦电影中文字幕| 阿宾MD0165麻豆沈娜娜| 青娱乐日韩| 亚洲一级无码| 久久黄色视频免费观看| 长腿女神打扫偷懒被主人猛操惩罚| 在线内射视频| TokyoKot大交乱无码| 免费操逼网| 免费的黄色片| 91国产爽黄在线| 偷拍一区二区三区| 高潮视频在线观看| 欧洲亚洲在线| 中文字幕高清无码免费视频| 日韩中文字幕在线观看视频| 97色色婷婷五月天| 俺来俺去| 免费成人视频在线观看| 翔田千里无码| 国产欧美日韩一区二区三区| 婷婷五月天丁香成人社区| 天天操天天干天天射| 撸一撸av| 777av| 国产精品高潮无套内谢| 久久天堂av| 久草综合视频| AAA成人| 中文字幕淫乱视频欧美| 黄色AV免费| 无码另类| 97超碰人人| 久久综合五月天| 视频一区在线播放| 西西888WWW大胆无码| 爱逼综合| 国产美女18毛片水真多| 偷拍视频网站| 日本黄色色情视频| 国产激情免费| 中文字幕第2页| 亚洲一区高清| 外国成人视频| 黄片免费看视频| 中文字幕永久在线视频| 成年人在线视频| 天天综合7799| 我要看黄色一级片| 久久久久久国产| 亚洲秘一区二区三区-精品亚洲二区- | 91福利院| 亚洲午夜AV久久乱码| 91毛片在线观看| 欧美日韩一区二区三区视频| 日本无码一区二区三区| 欧美AAA在线观看| 麻豆精品在线播放| 大香蕉伊人综合| 91人人操人人| 久久午夜成人电影| 欧美色婷婷| 一区二区入口| 欧美日韩大屌| 99热超碰| 国产麻豆三级片| 久久亚洲一区| 欧美性爱精品一区| 翔田AV无码秘三区| 天天日天天色天天干| 国产精品久久久久久亚洲毛片| 91啪啪视频| 激情久久AV一区AV二区AV三区| 亚洲AV一二三| 日韩一级网站| 亚洲激情图| 国产在线视频第一页| 麻豆回家视频区一区二| 91蝌蚪视频在线观看| 一区二区三区四区| 2016av天堂网| 国产久久久久久久| 成人黄色免费看| 伊人影院在线免费观看| 久久久久久久国产| 婷婷五月天小说| 真人一级毛毛片| 四虎国产精品成人久久| 国产三级自拍视频| a毛片| 日本天堂网在线观看| 日韩一级黄色电影| 日韩v在线| 乱伦婷婷| 操小逼视频| 亚洲精品区| 婷婷五月丁香花| 91AV在线免费观看| 综合玖玖| 91久久精品日日躁夜夜躁国产| 日韩怡春院| 大香蕉伊人色| A级毛片网站| 日韩A级毛片| 丁香婷婷六月天| 另类TS人妖一区二区三区| AV天堂小说| 爱操视频| 日本久久综合| 资源av| 中文字幕在线欧美| 国产黄色免费看| 超碰人人摸| 麻豆91精品91久久久| 91一区在线观看| 国产精品福利在线观看| 日韩无码二区| 午夜神马影院| 免费观看黄片网站| 撸撸操在线视频观看只有精品 | 翔田AV无码秘三区| 人人超碰人人| 大香蕉网站视频| 五月天婷婷操逼视频| www.干| 国产AV资源网| 天堂网av2025| 亚洲最新AV在线| 91成人视频| 在线免费看毛片| 一级性爽A√毛片| 在线观看亚洲中文字幕| 豆花无码视频一区二区| 一区二区三区成人| A片视频免费看| 亚洲成人视频免费在线观看| 天天爽夜夜操| 亚洲AV无码成人精品区东京热 | 人妻熟女在线| 中文字幕在线视频日本| 精产国品一区二区| 超碰大香蕉| 91久久久久久久| 久久色播| 国产精品久久久久无码AV| 日本在线不卡一区| 久久久成人电影| 国产在线观看| 99xxxxx| 亚洲无码专区视频| 天天草天天爽| 亚洲无吗在线视频| 肏屄视频在线观看| 久射久| 日韩黄色三级| 99re6热在线精品视频| 天天天做夜夜夜爽无码| 男女性爱视频免费| 成人黄色电影| 山东wBBBB搡wBBBB| 免费内射视频| 裸体美女视频欧美18| 国产成人中文字幕| 亚洲经典一| 亚洲成人网站视频| 大香蕉啪啪| 久草综合在线| 99精品丰满人妻无码| 国产成人AV在线观看| 青青草狠狠干| 亚洲91无码精品一区在线播放| 日韩99在线观看| 西西4444WWW无码视频| 国产精品久久久久久久久久久免费看 | 91人妻人人澡人人添人人爽| 无码欧美精品一区二区| 在线观看毛片网站| 欧美黄片免费看| 国产高清精品软件丝瓜软件| 99热在线免费| 天天做天天爽| NP玩烂了公用爽灌满视频播放| 国产天堂在线观看| 国产福利合集| 97这里只有精品| 女人操逼视频| 91色色色| 一级特黄大片录像i| 四lll少妇BBBB槡BBBB| 91天堂在线| 欧美在线视频网| 97精品超碰一区二区三区| 丁香五月婷婷视频| 久久丁香五月天| 亚洲一级电影| 免费在线观看黄色视频| 一本色道久久综合亚洲二区三区 | 小h片在线观看| 国产成人精品一区二区三区| 成人无遮挡| 不卡无线在一区| аⅴ资源新版在线天堂| 骚色综合| 午夜成人精品一区二区三区| 99er这里只有精品| 久久视频一二| 久久丁香五月婷婷五月天激情视频 | 日韩三级在线观看| 波多野结衣av中文字幕| 欧美日韩国产激情| 亚洲无码激情视频| 年轻女教师高潮2| 欧美色精品| 成人性生交大片免费看小芳 | 国产成人精品久久二区二区91| 日韩中文字幕一区二区| 大香蕉精品一区| 成人在线观看无码| 九九九成人视频| 亚洲AV无码成人精品区天堂小说 | 中文无码人妻| 九九99精品| 免费看一区二区三区| 熟女久久| 久久三| 精品黄色片| 性无码一区二区三区在线观看| 少妇搡BBBB搡BBB搡造水多/ | 久久久天堂国产精品女人| xxx综合网| 成人精品免费视频| 日韩动态图| 五月丁香激情视频| 久久少妇视频| 成人A片免费看| 777Av| 黄色影院在线观看| 久久精品视频99| A片免费播放| 免费在线观看黄色片| 青青草社区| 自拍视频网| 91久久成人| 狠狠欧美| 成人无码日韩精品| 久久久成人免费视频| 国产欧美日韩在线视频| 嫩小槡BBBB槡BBBB槡免费-百度| H网站在线观看| 激情国产AV| 黄色a一级| 日韩欧美视频在线播放| 久久99精品国产.久久久久久| 蜜臀久久精品久久久久| 懂色av蜜臀av粉嫩av分 | 午夜福利视频91| 国产人妻在线| 无码专区在线观看| 五月丁香六月婷婷综合| 国产精品乱子伦一区二区三区视频| 9l视频自拍蝌蚪9l成人| 亚洲乱码中文字幕| 狠狠av| 中文字幕无码人妻在线视频| 亚洲视频一区二区三区四区娇小视频在线观看视频 | 91外围女视频| 成人性生活一级片| 乌克兰xxxx| 99视频精品视频| 败火老熟女ThePorn视频| 国产精品91久久久| 1024国产在线| 亚洲日韩中文字幕无码| 免费AV播放| 91视频大全| 大香蕉色婷婷| 人人摸人人摸人人| 猛男大粗猛爽h男人味| 成人精品一区二区三区电影| 亚洲第一色婷婷| 永久m3u8在线观看| 大香蕉国产在线视频| 日韩一区在线播放| 一区二区入口| 北条麻妃人妻中文字幕91影视| 国产亚洲精品码| 欧美一级大香蕉| 四川BBB搡BBB搡多人乱| 在线观看欧美日韩| 欧美综合国产| 久久婷婷秘精品国产538| 超碰99在线| 三级免费无限AV| 丰满人妻一区二区免费看| 91香蕉在线观看视频在线播放| 翔田千里无码视频| 国产日韩91| 波多野吉衣av| 成人在线第一页| 亚洲视频,中文字幕| 一区二区三区四区五区无码| 99精品热视频| 久久免费视屏| 亚洲v天堂| 日本成人视频| 国产成人久久777777黄蓉| 日韩欧美在线观看| 无码在线视频免费观看| 日韩无码人妻系列| 日韩欧美中文字幕视频| 国产秘精品区二区三区日本| 人人搞人人操| 五月天久久精品| 青青草免费观看视频| 成人看片黄a免费看视频| 国产区av| av在线精品| 人人操人人色| 亚洲香蕉av| 小黄片在线免费观看| 日韩第22页| 国产精品久久久久久久9999| 日本做爱视频| 日韩在线视频91| 激情五月天影院| 欧美日本亚洲| 中文字幕亚洲在线| 中国免费视频高清观看| 人妻北条麻妃在线| 成人18视频| 草逼视频网站| 成年人黄色视频在线观看| 毛片毛片毛片毛片毛片毛片| 亚洲免费在线播放| 97在线观看视频| 五月天毛片| 一级片AA| 日韩欧美大片在线观看| 好男人av| 亚欧洲精品| 亚洲成人免费网站| 人人看人人摸人人操| 人人操碰成人网| 一区二区中文字幕| 人妻HDHDHD96XXXX| 欧亚AV| 麻豆内射| 91精品综合| AV一区二区三区| 亚洲美女网站在线观看| 人妻熟女在线视频| 日本电影一区二区三区| 日本在线视频一区二区| 91人妻无码成人精品一区二区| 操逼操| 亭亭色| 日韩AV无码高清| 成人做爰黄片视频免费| 日韩成人区| 最新中文字幕在线视频| 91免费在线| 香蕉av在线播放| 午夜久久福利| 大香蕉伊人综合网| 嫩BBB槡BBBB槡BBBB撒尿| 东方AV在线观看| 翔田千里被操120分钟| 一级操逼大片| 北条麻妃AV观看| 黄色视频在线观| 一级a一级a免费观看视频Al明星| 99在线免费观看视频| 国产欧美毛片| 日韩无码系列| 日韩AV一区二区三区四区| 免费看黄片的网站| 久久一本| 欧美久久国产精品| 国产精品成人免费| 久久大鸡巴| 在线观看视频黄| 欧美天天| 久艹久| 欧美三级欧美三级三级| 操日本少妇| 九色在线观看| 亚洲综合激情五月久久| 成人午夜小电影| 1插菊花网| 成人大香蕉网| 午夜无码电影| 8050午夜一级免费| 亚洲色图88| 午夜久久电影| 91香蕉国产| 底流量AV电影在线| 91亚瑟视频| 国产v在线观看| 高H视频在线观看| 国产色片| 久久久无码电影| 91搞| 国产真实乱婬A片三区高清蜜臀| 91狠狠综合久久| 男女怕怕网站| 婷婷五月天丁香在线| 婷婷三级片| 999无码| 欧美成人不卡| 欧美成人手机在线看片| 高清AV在线| 日韩少妇| 91丨露脸丨熟女精品| 香蕉综合在线| 五月丁香免费视频| 成人久久| 天天操大香蕉| 97视频国产| 狠狠一区| 亚洲一区二区黄色电影视频网站| AV电影在线免费观看| 天天日天天摸| 青青草综合网| 手机看片福利一区二区| 日韩欧美人妻无码精品| 欧美性性生交XXXXX无码| 四川w搡BBB搡wBBB搡| 日韩在线1| a片免费观看视频| www.91国产| 亚洲无码影视| 亚洲婷婷精品国产成人| 99久久久国产| 五月婷婷在线视频| 丰满少妇一级片| 黄片日逼视频| 亚洲综合国产| 强伦轩人妻一区二区三区最新版本更新内容 | 国产二区三区| 亚洲133| 国产一区二区波多野结衣| 伊人久久视频| 操操操操操| 欧美裸体视频| 日日操夜夜| 水果派av解说| 亚洲精品乱码久久久久久蜜桃欧美 | 露脸老熟女91集合| 香蕉视频色| 在线天堂9| 日本男人天堂| 偷拍一区二区| 国产在线观看自拍| 欧美色图888| 亚洲第一色网| 中文字幕日本电影| 欧美生活片18| 色九九综合| 色第一页| 91逼站| 午夜福利亚洲| 成人免费无码毛片| 日本一级黄色A片| 国产成人免费在线| 五月天色色小说| 亚洲天堂在线看| 波多野结衣无码AV在线| 污视频在线免费| 国产A级片| 欧美69视频| 欧美大鸡吧视频| 毛片成人网| 国产视频久久久| 91在线无码精品入口电车| 久久久久久综合| 色老板免费视频| 欧美视频在线观看一区| 奇米狠狠操| 日韩成人无码全裸视频| 国产成人综合电影| 日韩午夜剧场| 成人免费毛片果冻日本| 大炕上公让我高潮了六次| 国产精品一二区| 先锋影音亚洲无码av| 亚洲人天堂| 亚洲成人av| 伊人伊人网| 精品视频久久久|