如何防止 [flush-8:16] 和 [jbd2/sdb2-8] 导致 GUI 无响应?

如何防止 [flush-8:16] 和 [jbd2/sdb2-8] 导致 GUI 无响应?

大约每周两次,当我在执行一些简单的任务(例如浏览网页或撰写论文)时,整个图形界面会毫无预警地锁定约 10-20 秒。发生这种情况时,GUI 元素不会响应鼠标或键盘输入,并且系统监视器小程序会显示 100% IOWait 处理器使用率。

今天,问题出现时,我终于碰巧打开了 GNOME 终端。尽管 Google Chrome、Firefox、GNOME Do 和 GNOME Panel 等其他应用程序没有响应,但终端仍然可用。我运行iotop后发现名为[flush-8:16]和的命令[jbd2/sdb2-8]交替使用了 99.99% 的 IO。

这些是什么?我该如何防止它们导致 GUI 无响应?

细节

$ mount | grep ^/dev
/dev/sda1 on / type ext4 (rw,noatime,discard,errors=remount-ro,commit=0)
/dev/sdb2 on /home type ext4 (rw,commit=0)
$ cat /proc/swaps 
Filename        Type        Size     Used    Priority
/dev/sdb3       partition   1052252  0       -1

/dev/sda是一个OCZ-VERTEX2并且/dev/sdbWD10EARS。 这是dumpe2fs /dev/sdb2smartctl /dev/sdb --all

我没有发现dmesg或有任何不寻常的地方/var/log/syslog

答案1

我大胆提出一个理论:

/dev/sdb1也许是交换空间?

如果图形界面的核心部分被卸载到磁盘,GUI 就无法继续运行,直到收到这些数据。如果交换磁盘处于休眠状态,这意味着它会卡住,直到磁盘响应。

我认为这会导致暂时锁定,10-20 秒的时间正好是休眠磁盘响应所需的时间。终端可能仍然响应,因为它所需的所有内容都已存储在 RAM 中。

一些探索理论的终端工具:

  • hdparm -C /dev/sdX告诉您磁盘是否处于休眠状态:

    $ sudo hdparm -C /dev/sdb
    /dev/sdb:
    drive state is:  standby
    

    active/idle表示正在运行。处于 状态standby或状态,sleeping它已停止旋转,需要一段时间才能重新启动。请参阅man hdparm

  • free -m显示使用了多少交换空间:

    $ free -m     
                 total       used       free     [...]
    Mem:          5973       4928       1045     [...]
    -/+ buffers/cache:       1091       4882
    Swap:         6234          0       6234
    

    “Swap:” 是相关的行,在这个例子中,有 6.2 GB 的交换可用,但未使用任何内容。

如果是这个问题,您可以将交换移至 sda 或禁用 sdb 的 spindown。

相关内容