jdb2-io-high

jdb2-io-high

在一臺 EC2(c5.xlarge) 、系統 ubuntu16.04,使用 docker 運行 mysql 和 java 程序

java 程序執行類似如下的 sql

START TRX
INSERT order (id, ..., ...)
COMMIT;

START TRX
UPDATE asset set ... = ... WHERE user_id = #{id}
COMMIT;

START TRX
UPDATE order set ... = ... WHERE id = #{id}
COMMIT;

上訴的 SQL 在 java 程序運行開頭的一段時間(例如 30 分鐘內),其執行時間是穩定 10ms 以內的。

執行一段時間後,執行平均時間突然變爲 100ms左右,執行時間範圍變成 50ms ~ 200ms, 有一些峯值是達到 500ms

如下圖展示,在某個時間點,mysql 的事務執行時間突然進入一個"高原"。
在這裏插入圖片描述
mysql 事務執行時間 進入 “高原” 的時候,也發現 磁盤的 io 被沾滿(使用 iostat 命令),
但是 磁盤的寫入數據量減少了,如下圖紅色箭頭標註。
在這裏插入圖片描述
然後使用 iotop 發現一個進程 jbd2/nvme0n1p1-,其中 nvme0n1p1 是 EC2 的系統盤,200G(SSD)

這個 jbd2 進程佔用了 90% 以上的 IO,但是讀寫量十分少,

我按照關鍵字:“jbd2 io high” 的關鍵字搜索,得到了如下的幾篇文章

根據相關的搜索,我猜測,由於這個進程佔用了大部分的磁盤 IO,導致 mysql 事務落地到磁盤的耗時變多。我看大多數文章都是說這個可能是 ubuntu16.04 內核 bug,升級內核版本應該可以解決。

最終解決方案是將系統升級到 ubuntu18.04。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章