Khắc phục sự cố một gian hàng Redis


8

Chúng tôi có một số trường hợp redis chạy trên một máy chủ. Ngoài ra còn có nhiều máy chủ lớp web kết nối với các cá thể gặp phải tình trạng đình trệ cùng một lúc.

Chúng tôi đã có các gói chụp vào thời điểm đó, xác định rằng có một gian hàng trong cả lưu lượng TX và RX, theo các biểu đồ IO của wireshark sau đây:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Có sự tăng đột biến trong các cuộc gọi redis, nhưng tôi nghi ngờ đó là một hiệu ứng và không phải là nguyên nhân do độ trễ thời gian:

nhập mô tả hình ảnh ở đây

Với khoảng thời gian lấy mẫu 15 / giây (số này được thu thập dưới dạng bộ đếm), có trung bình 136 gian hàng phân bổ bộ nhớ:

nhập mô tả hình ảnh ở đây

Dường như cũng có một số lượng thông thường của các trang NUMA được di chuyển cùng một lúc:

nhập mô tả hình ảnh ở đây

Mặc dù ở trên có vẻ bình thường, có hai điểm dữ liệu liên tiếp cho điều này làm cho nó bất thường so với các gai trên 300 khác nhìn thấy trong biểu đồ.

Cũng có sự tăng đột biến tương quan trong các lỗi nén bộ nhớ và các ngăn nén:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Mặc dù tôi có rất nhiều thông tin bộ nhớ ở đây, kiến ​​thức về bộ nhớ Linux của tôi không đủ sâu để thực sự đưa ra giả thuyết về một câu chuyện hay mang tất cả thông tin này lại với nhau để giải thích gian hàng. Bất cứ ai có kiến ​​thức về bộ nhớ Linux sâu (và có lẽ kiến ​​thức bộ nhớ sâu đỏ) có thể liên kết một số thông tin này với nhau không?

Chúng tôi thu thập tất cả các số liệu thống kê từ / Proc / vmstat trong khoảng thời gian 15 giây, vì vậy nếu có bất kỳ dữ liệu nào mà bạn nghĩ có thể thêm vào điều này, vui lòng yêu cầu nó. Tôi chỉ chọn những thứ dường như có hoạt động thú vị, đặc biệt là gian hàng cấp phát, di chuyển numa và gian hàng nén / thất bại. Tổng số theo sau, và bao gồm 20 ngày thời gian hoạt động:

[kbrandt@ny-redis01: ~] uptime
 21:11:49 up 20 days, 20:05,  8 users,  load average: 1.05, 0.74, 0.69
[kbrandt@ny-redis01: ~] cat /proc/vmstat
nr_free_pages 105382
nr_alloc_batch 5632
nr_inactive_anon 983455
nr_active_anon 15870487
nr_inactive_file 12904618
nr_active_file 2266184
nr_unevictable 0
nr_mlock 0
nr_anon_pages 16361259
nr_mapped 26329
nr_file_pages 15667318
nr_dirty 48588
nr_writeback 0
nr_slab_reclaimable 473720
nr_slab_unreclaimable 37147
nr_page_table_pages 38701
nr_kernel_stack 987
nr_unstable 0
nr_bounce 0
nr_vmscan_write 356302
nr_vmscan_immediate_reclaim 174305
nr_writeback_temp 0
nr_isolated_anon 0
nr_isolated_file 32
nr_shmem 423906
nr_dirtied 3071978326
nr_written 3069010459
numa_hit 1825289996
numa_miss 3360625955
numa_foreign 3360626253
numa_interleave 64798
numa_local 1856473774
numa_other 3329442177
workingset_refault 297175
workingset_activate 24923
workingset_nodereclaim 0
nr_anon_transparent_hugepages 41
nr_free_cma 0
nr_dirty_threshold 3030688
nr_dirty_background_threshold 1515344
pgpgin 25709012
pgpgout 12284206511
pswpin 143954
pswpout 341570
pgalloc_dma 430
pgalloc_dma32 498407404
pgalloc_normal 8131576449
pgalloc_movable 0
pgfree 8639210186
pgactivate 12022290
pgdeactivate 14512106
pgfault 61444049878
pgmajfault 23740
pgrefill_dma 0
pgrefill_dma32 1084722
pgrefill_normal 13419119
pgrefill_movable 0
pgsteal_kswapd_dma 0
pgsteal_kswapd_dma32 11991303
pgsteal_kswapd_normal 1051781383
pgsteal_kswapd_movable 0
pgsteal_direct_dma 0
pgsteal_direct_dma32 58737
pgsteal_direct_normal 36277968
pgsteal_direct_movable 0
pgscan_kswapd_dma 0
pgscan_kswapd_dma32 13416911
pgscan_kswapd_normal 1053143529
pgscan_kswapd_movable 0
pgscan_direct_dma 0
pgscan_direct_dma32 58926
pgscan_direct_normal 36291030
pgscan_direct_movable 0
pgscan_direct_throttle 0
zone_reclaim_failed 0
pginodesteal 0
slabs_scanned 1812992
kswapd_inodesteal 5096998
kswapd_low_wmark_hit_quickly 8600243
kswapd_high_wmark_hit_quickly 5068337
pageoutrun 14095945
allocstall 567491
pgrotated 971171
drop_pagecache 8
drop_slab 0
numa_pte_updates 58218081649
numa_huge_pte_updates 416664
numa_hint_faults 57988385456
numa_hint_faults_local 57286615202
numa_pages_migrated 39923112
pgmigrate_success 48662606
pgmigrate_fail 2670596
compact_migrate_scanned 29140124
compact_free_scanned 28320190101
compact_isolated 21473591
compact_stall 57784
compact_fail 37819
compact_success 19965
htlb_buddy_alloc_success 0
htlb_buddy_alloc_fail 0
unevictable_pgs_culled 5528
unevictable_pgs_scanned 0
unevictable_pgs_rescued 18567
unevictable_pgs_mlocked 20909
unevictable_pgs_munlocked 20909
unevictable_pgs_cleared 0
unevictable_pgs_stranded 0
thp_fault_alloc 11613
thp_fault_fallback 53
thp_collapse_alloc 3
thp_collapse_alloc_failed 0
thp_split 9804
thp_zero_page_alloc 1
thp_zero_page_alloc_failed 0 

Ngoài ra tất cả các cài đặt / Proc / sys / vm / * nếu điều đó giúp:

***/proc/sys/vm/admin_reserve_kbytes***
8192
***/proc/sys/vm/block_dump***
0
***/proc/sys/vm/dirty_background_bytes***
0
***/proc/sys/vm/dirty_background_ratio***
10
***/proc/sys/vm/dirty_bytes***
0
***/proc/sys/vm/dirty_expire_centisecs***
3000
***/proc/sys/vm/dirty_ratio***
20
***/proc/sys/vm/dirty_writeback_centisecs***
500
***/proc/sys/vm/drop_caches***
1
***/proc/sys/vm/extfrag_threshold***
500
***/proc/sys/vm/hugepages_treat_as_movable***
0
***/proc/sys/vm/hugetlb_shm_group***
0
***/proc/sys/vm/laptop_mode***
0
***/proc/sys/vm/legacy_va_layout***
0
***/proc/sys/vm/lowmem_reserve_ratio***
256 256 32
***/proc/sys/vm/max_map_count***
65530
***/proc/sys/vm/memory_failure_early_kill***
0
***/proc/sys/vm/memory_failure_recovery***
1
***/proc/sys/vm/min_free_kbytes***
90112
***/proc/sys/vm/min_slab_ratio***
5
***/proc/sys/vm/min_unmapped_ratio***
1
***/proc/sys/vm/mmap_min_addr***
4096
***/proc/sys/vm/nr_hugepages***
0
***/proc/sys/vm/nr_hugepages_mempolicy***
0
***/proc/sys/vm/nr_overcommit_hugepages***
0
***/proc/sys/vm/nr_pdflush_threads***
0
***/proc/sys/vm/numa_zonelist_order***
default
***/proc/sys/vm/oom_dump_tasks***
1
***/proc/sys/vm/oom_kill_allocating_task***
0
***/proc/sys/vm/overcommit_kbytes***
0
***/proc/sys/vm/overcommit_memory***
1
***/proc/sys/vm/overcommit_ratio***
50
***/proc/sys/vm/page-cluster***
3
***/proc/sys/vm/panic_on_oom***
0
***/proc/sys/vm/percpu_pagelist_fraction***
0
***/proc/sys/vm/scan_unevictable_pages***
0
***/proc/sys/vm/stat_interval***
1
***/proc/sys/vm/swappiness***
60
***/proc/sys/vm/user_reserve_kbytes***
131072
***/proc/sys/vm/vfs_cache_pressure***
100
***/proc/sys/vm/zone_reclaim_mode***
0

Cập nhật:

Có một thp_split gần đúng lúc:

nhập mô tả hình ảnh ở đây

Câu trả lời:


4

Cài đặt của bạn cho / Proc / sys / vm / zone_reclaim là gì? Hãy thử đặt nó thành 0. Có rất nhiều thứ trên mạng nếu bạn tìm kiếm 'zone_reclaim', vì vậy tôi sẽ không thử làm lại ở đây.


Có vẻ như là không[kbrandt@ny-redis01: ~] cat /proc/sys/vm/zone_reclaim_mode 0
Kyle Brandt

1
ĐỒNG Ý. Điểm dừng tiếp theo: vòng tay trong suốt. Có vẻ như chúng đang được sử dụng: thp_fault_alloc 11613 thp_fault_fallback 53 thp_collapse_alloc 3 thp_collapse_alloc_fails 0 thp_split 9804 thp_zero_page_alloc 1 thp_zero_page_all antirez.com/news/84 TL; DR: tiếng vang không bao giờ> / sys / kernel / mm / transparent_hugepage / kích hoạt
Tobert

Có một thp_split là một mối tương quan chặt chẽ. Một số độ trễ trong ghi âm nhưng thời gian tác nhân giám sát cũng có thể bị ảnh hưởng. Cập nhật câu hỏi với biểu đồ!
Kyle Brandt

Tâm trí khai sáng cho chúng ta những gì đang xảy ra trong một lần chia tay?
Kyle Brandt

Chúng tôi có nó được đặt trong con rối, nhưng là một người thực hiện. Tôi không thấy nó trong RC.local, vì vậy giả thuyết hiện tại của tôi là một điều kiện chủng tộc - redis bắt đầu trước khi chuyển đổi kernel được thiết lập
Kyle Brandt

2

Khi Redis chuyển sang điểm kiểm tra, nhân Linux cần sao chép các bảng ánh xạ để sao chép khi ghi. Nếu bạn có nhiều RAM, việc này có thể mất nhiều thời gian. Chúng tôi có một ví dụ Redis 200 GB mất 8 giây để rẽ nhánh và máy bị điếc với thế giới trong khi điều này xảy ra.

Cách giải quyết (từ dễ đến khó):

  • điểm kiểm tra ít thường xuyên hơn, tăng thời gian và số lượng khóa trước khi điểm kiểm tra
  • phân chia dữ liệu của bạn thành nhiều trường hợp xử lý, mỗi trường hợp sử dụng ít RAM hơn
  • hãy thử aof thay vì điểm kiểm tra, mặc dù điều này đôi khi sẽ rẽ nhánh
  • hãy thử các trang lớn, mặc dù bạn có thể cần phải tăng gấp đôi RAM vật lý của mình vì gần như mọi thứ sẽ bị bẩn trong khi kiểm tra điểm
  • vít nó và đi với Postgres
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.