缓慢/冻结 ext4 // 任务同步在大型只写服务器上被阻止

缓慢/冻结 ext4 // 任务同步在大型只写服务器上被阻止

我们有几台 90TB 服务器(Areca RAID-6 分为 10 个 ext4 分区)

该应用程序基本上是一个环形缓冲区;不断写入数据并删除旧数据。因此,每个分区始终 100% 已满(每个分区 15GB 作为净空)。

现在我们看到写入应用程序出现段错误,因为(我想)它无法足够快地写入磁盘。

应用程序段错误与此错误大约同时发生(其中有多个):

Nov 26 11:33:10 localhost kernel: INFO: task sync:30312 blocked for more than 120 seconds.
Nov 26 11:33:10 localhost kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Nov 26 11:33:10 localhost kernel: sync            D f63a4ec0     0 30312   6161 0x00000080
Nov 26 11:33:10 localhost kernel: f571fe9c 00000086 d9b29930 f63a4ec0 d9b29930 c18d5ec0 c18d5ec0 cca87419
Nov 26 11:33:10 localhost kernel: 0005c511 c18d5ec0 c18d5ec0 cca7d888 0005c511 c18d5ec0 f63b2ec0 e3abe130
Nov 26 11:33:10 localhost kernel: c107d121 00000001 00000046 00000000 d9b29d52 d9b29930 f3544d00 f3c62800
Nov 26 11:33:10 localhost kernel: Call Trace:
Nov 26 11:33:10 localhost kernel: [<c107d121>] ? try_to_wake_up+0x1d1/0x230
Nov 26 11:33:10 localhost kernel: [<c107d1df>] ? wake_up_process+0x1f/0x40
Nov 26 11:33:10 localhost kernel: [<c1063efe>] ? wake_up_worker+0x1e/0x30
Nov 26 11:33:10 localhost kernel: [<c1065a58>] ? insert_work+0x58/0x90
Nov 26 11:33:10 localhost kernel: [<c154ab53>] schedule+0x23/0x60
Nov 26 11:33:10 localhost kernel: [<c15490e5>] schedule_timeout+0x155/0x1d0
Nov 26 11:33:10 localhost kernel: [<c100dffe>] ? __switch_to+0xee/0x370
Nov 26 11:33:10 localhost kernel: [<c1066371>] ? __queue_delayed_work+0x91/0x150
Nov 26 11:33:10 localhost kernel: [<c154b311>] wait_for_completion+0x71/0xc0
Nov 26 11:33:10 localhost kernel: [<c107d180>] ? try_to_wake_up+0x230/0x230
Nov 26 11:33:10 localhost kernel: [<c118865c>] sync_inodes_sb+0x7c/0xb0
Nov 26 11:33:10 localhost kernel: [<c118dbc5>] sync_inodes_one_sb+0x15/0x20
Nov 26 11:33:10 localhost kernel: [<c1168988>] iterate_supers+0xa8/0xb0
Nov 26 11:33:10 localhost kernel: [<c118dbb0>] ? fdatawrite_one_bdev+0x20/0x20
Nov 26 11:33:10 localhost kernel: [<c118dc01>] sys_sync+0x31/0x80
Nov 26 11:33:10 localhost kernel: [<c15534cd>] sysenter_do_call+0x12/0x12

fstab 将分区挂载为ext4 noauto,rw,users,exec 0 0

系统是32位Centos 6.6,内核为3.10.80-1。

问题: 这是某种磁盘损坏问题还是我需要在 Linux 或文件系统中调整一些东西来解决这个问题?该应用程序需要永远 24x7 运行...

答案1

现在我们看到写入应用程序出现段错误,因为(我想)它无法足够快地写入磁盘。

好吧,它不应该只是这样出现段错误!我认为任何文件系统都不能保证在接近 100% 满的情况下的写入吞吐量。您的应用程序从一开始就设计得很糟糕:(。但是您也许可以修复它...下一步是检查它是否使用调试符号进行编译,并尝试获取堆栈跟踪以查看段错误发生的位置以及从那里向后工作。

从新提供的信息来看,您似乎遇到了性能问题,因为文件系统试图在接近 100% 填充的情况下保持合理的碎片整理。我会尝试增加删除程序进程的积极性,以便它尝试将分区保持在 25% 左右的可用空间。

相关内容