小樱 发表于 2021/12/8 06:55

kangle 3311中重启进程后打不开的解决办法 内存索引缓存数据写入机械硬盘过慢save cache index now...

kangle 3311中重启进程后打不开的解决办法 内存索引缓存数据写入机械硬盘过慢save cache index now...

分析,日志输出
Wed Dec8 06:39:36|save cache index now...

可以观察到由于缓存信息过多,在保存索引,然后观察top wa状态,发现占用10-20%左右
在观察iotop,可以看到磁盘性能已经用尽,解决办法,放弃索引保存,立即杀死进程,或者更换固态盘
Total DISK READ: 720.48 K/s | Total DISK WRITE: 23.62 K/s
TIDPRIOUSER   DISK READDISK WRITESWAPIN   IO>    COMMAND                                                                           
7789 be/4 root      720.48 K/s563.00 K/s0.00 % 99.99 % kangle

可以分析到,正在写入的文件名为index.sqt3-journal
-rw-r--r--   1 root root 1045036032 12月8 06:57 index.sqt3
-rw-r--r--   1 root root    6169712 12月8 06:57 index.sqt3-journal

# du -sh index*
4.0K        index
4.0K        index.scan
997M        index.sqt3
120K        index.sqt3-journal
# du -sh index*
4.0K        index
4.0K        index.scan
997M        index.sqt3
6.5M        index.sqt3-journal
#

通过确认,,确实是在写缓存,是把内存缓存中的数据写进磁盘,内存分配的过高了,就导致了毛病
ll /proc/进程pid/fd

杀死进程并且重新启动kangle命令
/vhs/kangle/bin/kangle -q;killall -9 kangle;sleep 3;/vhs/kangle/bin/kangle


或者有耐心,,,可以等跑完索引,如果强制杀死会导致部分未写入索引状态的磁盘缓存信息丢失,需要使用3311中磁盘缓存扫描恢复该未及时写入导致丢失的部分缓存信息

或者等待后续版本完善,索引有应当直接全读到内存中,写入索引过程都应当在内存完成,然后在把文件复制到磁盘,并且重启的时候应当丢弃掉内存中的数据更科学?
再不然这部分做成工作线程异步处理也可以,,不过貌似占用IO比较大也不太适合这样搞异步,机械盘那烂io可能会导致正常web访问卡住


2023年1月10日补充
3.6.0版本已修复
https://github.com/keengo99/kangle/commit/8ff4f4c7a5fc775f04f32d58b2e44f77f86f1027

页: [1]
查看完整版本: kangle 3311中重启进程后打不开的解决办法 内存索引缓存数据写入机械硬盘过慢save cache index now...