PVE内存异常占用问题排查
L一颗芫荽P
2026年03月07日 14:17
收录于文集
共2篇
飞牛Nas

故障表现

最早我的pve是直接安装了飞牛os来管理我的整个家庭文件,那么就需要互相拷贝东西。我的飞牛直通了两块机械硬盘,系统装在了ssd中。在拷贝东西的时候就发现了一个问题,不管是向内还是向外拷贝大文件拷贝着拷贝着就要死机,这个死机是整个的硬件系统卡死,并不是飞牛os卡死,体现就是我所有运行的docker也都要寄。

那么我就很疑惑了,根据我的经验我觉得有一种可能性是电源不足,硬盘大量写入的时候供电不足,但是按道理来说我这个硬盘应该吃不了这么高的电量。验证这个问题也很简单,让pve的cpu跑起来,毕竟这个需要的供电量也不小。

排查问题

那么就要确定一下到底是哪里出了问题。我在pve的概况页面进行拷贝文件的操作,眼睁睁的看着内存从1g的空间瞬间变成了0,然后死机了,飞牛os关机。那么问题就直接被我排出来了。

解决方案

那么我就去找gemini,我问gemini: ”我的pve虚拟机里面装了一个nas系统,并且直通了两块硬盘给这个nas,然后我通过这个nas系统拷贝东西的时候pve的内存会疯狂占用,并且停止拷贝占用也不会降低,会一直占用到100%之后整个系统宕机。然后nas系统会自动关机之后系统恢复。请问我应该从哪里排查这个问题“

gemini给了我四个可能的选项:

  1. 检查PVE的ZFS内存限制

  2. 关闭虚拟机的Ballooning功能

  3. 改变硬件直通的方式

  4. 检查KVM脏页回写

根据gemini给我的几个办法,一个一个的尝试,但是并没有什么用,我就给gemini截了一个arcstat的截图如下

至少gemini确定了一下不是ZFS ARC的问题,那么gemini问我这个系统有没有swap,我这个系统确实没有swap分区,这时候gemini让我开启swap,如下是操作:

第一步:检查现有的swap状态 在pve终端中输入:

代码块
Shell
自动换行
复制代码
free -h
复制成功
代码块
PlainText
自动换行
复制代码
检查swap这一行,发现我这个确实为0B,那么进入第二步
复制成功

第二步:创建一个4G的swap文件

  1. 创建文件

代码块
PlainText
自动换行
复制代码
fallocate -l 4G /swapfile
复制成功
  1. 设置权限

代码块
PlainText
自动换行
复制代码
chmod 600 /swapfile
复制成功
  1. 格式化为swap格式

代码块
PlainText
自动换行
复制代码
mkswap /swapfile
复制成功
  1. 启用swap

代码块
PlainText
自动换行
复制代码
swapon /swapfile
复制成功
  1. 设置为开机自动挂载

代码块
PlainText
自动换行
复制代码
nano /etc/fstab
复制成功
  1. 在文件末尾添加一行

代码块
PlainText
自动换行
复制代码
/swapfile none swap sw 0 0
复制成功

按 Ctrl + O 保存,Ctrl + X 退出。

  1. 调整swap倾向性以保证虚拟机性能。 编辑/etc/sysctl.conf

代码块
PlainText
自动换行
复制代码
nano /etc/sysctl.conf
复制成功

添加或者修改这一行

代码块
PlainText
自动换行
复制代码
vm.swappiness=10
复制成功

后面再添加以下参数限制以防止I/O撑爆内存

代码块
PlainText
自动换行
复制代码
vm.dirty_ratio = 5
vm.dirty_background_ratio = 2
复制成功

接下来再进行验证的时候就不再内存异常占用了

然后我就把飞牛OS卸载了,换成了OMV。