gluster volume status detail 命令导致打开文件过多,进程crash
在使用gluster 3.3.0的时候,发现各brick server的glusterd进程经常crash,日志中先出现
0-management: could not get inode size for ext4 : e2fsprogs package missing
0-management: failed to get inode size
然后进程就会被linux系统kill掉,log里报告说收到了11号signal
pending frames:
signal received: 11
在gluster源码中搜索"could not get inode size"
在xlators\mgmt\glusterd\src\glusterd-utils.c中可以看到该信息出现在
glusterd_add_inode_size_to_dict方法中,它报错说没有e2fsprogs包,但实际上该包已经被安装.
后来调查发现这个方法总是在调用 volume status XX detail时被调用,因此怀疑频繁调用 volume status detail方法会导致glusterd进程crash.
测试后果然发现volume status detail方法会打开过多的文件,造成fd leak.
多次运行
lsof -p 25595 | wc -l
gluster volume status MountCheck detail > /dev/null
lsof -p 25595 | wc -l
发现数量在持续增长.