느리거나 정지된 ext4 //대형 쓰기 전용 서버에서 작업 동기화가 차단됨

느리거나 정지된 ext4 //대형 쓰기 전용 서버에서 작업 동기화가 차단됨

우리는 여러 대의 90TB 서버를 보유하고 있습니다(Areca RAID-6은 10개의 ext4 파티션으로 나뉩니다).

애플리케이션은 기본적으로 링 버퍼입니다. 데이터는 지속적으로 기록되고 오래된 데이터는 삭제됩니다. 따라서 각 파티션은 항상 100% 가득 찼습니다(헤드룸으로 파티션당 15GB).

이제 우리는 디스크에 충분히 빠르게 쓸 수 없기 때문에 쓰기 응용 프로그램 segfault를 보고 있습니다.

응용 프로그램 세그먼트 오류는 이 오류와 거의 같은 시간에 발생합니다(여러 오류가 있음).

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

시스템은 커널 3.10.80-1이 포함된 32비트 Centos 6.6입니다.

질문: 이것은 일종의 디스크 손상 문제입니까, 아니면 이 문제를 해결하려면 Linux나 파일 시스템에서 뭔가를 조정해야 합니까? 애플리케이션을 연중무휴로 실행하는 데 시간이 오래 걸립니다...

답변1

이제 우리는 디스크에 충분히 빠르게 쓸 수 없기 때문에 쓰기 응용 프로그램 segfault를 보고 있습니다.

글쎄, 이렇게 세그폴트만 해서는 안 됩니다! 어떤 파일 시스템도 100% 가득 찼을 때 쓰기 처리량을 보장할 수 없다고 생각합니다. 귀하의 애플리케이션은 처음부터 제대로 설계되지 않았습니다 :(. 하지만 고칠 수는 있습니다... 다음 단계는 디버깅 기호로 컴파일되었는지 확인하고 스택 추적을 통해 세그폴트가 발생한 위치와 출처를 확인하는 것입니다. 거기서 거꾸로 작업하세요.

새로 제공된 정보에 따르면 파일 시스템이 100%에 가깝게 채워지는 동안 합리적으로 조각 모음을 유지하려고 시도하므로 성능 문제가 발생한 것으로 보입니다. 삭제자 프로세스의 강도를 높여 파티션의 여유 공간을 약 25%로 유지하려고 합니다.

관련 정보