前几天尝试用一台新的服务器进行开发,运行两个Node进程后CPU占用率直接上升到100%,开始以为是Node版本问题,切换版本后仍存在这个问题,使用 top 命令查看运行中进程,发现一个名为 kswapd0 的进程占用极高的CPU,这个进程的作用其实是在内存不足时将暂时用不到的数据转存到虚拟内存(Swap分区),而刚好我的服务器没有设置Swap分区,才导致CPU占用率过高,看来问题的原因找到了,接下来只需要设置Swap分区即可。
如果没有任何输出,表明系统没有配置swap
确保有足够的空间创建Swap分区
以上命令会在根目录创建大小为1G的文件,大小可根据需要进行调整,一般取和内存一般大小
验证是否创建成功
修改分区文件的权限,只允许 root 用户进行读取
将其标记为swap分区
启用分区,允许系统开始使用
再次检查系统分区
如果输出类似
表示分区已经创建成功
目前已经在当前会话的启用的swap分区,但是如果系统重新启动,分区就会消失,我们可以通过修改 /etc/fstab 的配置来使分区持久化
swappiness 参数配置系统使用swap分区的频率,数字越小,系统对swap的依赖越小,如果设置为接近0的数字,那么内核只有在绝对必要情况下才会将数据交换到磁盘。应为和硬盘交换数据比RAM慢的多,所以这个数字越小,通常会让系统加快
查看当前swappiness
临时修改swappiness
永久修改(推荐)
/etc/sysctl.conf
增大 vfs_cache_pressure 的值会让系统倾向于删除缓存中inode和dentry信息,进而导致系统频繁访问文件系统,我们可以通过输入以下内容将其设置为更保守的设置,例如50:
只在当前会话生效
永久修改(推荐)
/etc/sysctl.conf
在内存不够大时,需要开启Swap,使用一部分硬盘,作为虚拟内存,解决内存容量不足的情况。这篇博客是以 Ubuntu 基础来 *** 作的,其他 Linux 系统基本类似。很简单,跟着下面的步骤,一步一步来 *** 作即可。
在终端使用命令 free -m 查看输出结果
可以看到最后一行是0 0 0,则表示当前没有开启。
使用下面命令创建交换文件。因为要分配硬盘空间,所以有可能比较慢,等待一会
count=2048 表示创建 2G 的虚拟内存,因为这里用到的单位是 M ,如果要创建 6G 虚拟内存,则把2048 改成 6144 即可,因为 1024 * 6 = 6144。
可以使用 ls / | grep swapfile 命令查看一下,确保交换文件存在,创建成功。
依次执行下面的命令
依次运行上面两个命令后,如果成功,将会看到类似下面的输出
到这里,Swap 已经开启成功。我们再次使用 free -m 命令查看一下,你将看到类似下面的输出。
最后一行 Swap 将不再是0 0 0,而是我们上面设置的大小
使用编辑器编辑 /etc/fstab 文件,添加 Swap 自动开启的配置,这里使用 Vim进行编辑,也可以使用其他文本编辑工具,例如 nano
在 fstab 文件最后一行添加下面的内容
然后保存,退出。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)