我正在执行数据分析,需要使用R编程语言(特别是bigmemory软件包)将大约112GB的大数据matrix加载到内存映射文件中(请参阅https://cran.r-project.org/web/packages/bigmemory /index.html )。 matrix有80664列和356751行。
数据存储由NFS挂载的XFS文件系统组成。
XFS挂载选项是:
xfs noatime,nodiratime,logbufs=8,logbsize=256k,largeio,inode64,swalloc,allocsize=131072k
NFS正在使用以下选项导出FS:
rw,async,no_subtree_check,no_root_squash
NFS客户端正在使用这些选项安装FS:
defaults,async,_netdev
在加载文件之后,计算节点变得无响应(包括群集上的其他节点),文件服务器日志报告以下错误:
XFS: possible memory allocation deadlock in kmem_alloc (mode:0x250)
我可以通过像这样删除caching来解决这个问题:
echo 3 > /proc/sys/vm/drop_caches
文件服务器有16 GB的内存。
我已经阅读了以下博客:
https://blog.codecentric.de/en/2017/04/xfs-possible-memory-allocation-deadlock-kmem_alloc/
然而,这个问题并不是由于碎片化,因为我写信给的文件系统报告的碎片率低于2%。
所以,由于上面的XFS错误,我认为文件服务器内存不足,因为它无法处理当前任务发出的IO请求数量。
除了周期性地放弃caching(例如,通过cron )之外,还有更长久的解决scheme吗?
先谢谢您的帮助。
编辑:客户端和服务器上的CentOS 7.2。
在客户端和服务器上编辑#2:Kernel 3.10.0-229.14.1.el7.x86_64。
我相信目前修订的CentOS 7有内核3.10.0-693.2.2.el7和更新的XFS用户空间工具。 有什么理由你不在更当前的操作系统? 您指定的版本可以追溯到2015年。