【swap】Kylin ARM添加swap分区,解决系统内存紧张乱杀进程问题

麒麟KylinV10+arm架构(可能麒麟+x86也存在),服务器内存使用率到85%左右 ,如果没有设置swap,有进程可能被系统随机kill或者新服务启动失败,显示无法分配内存。

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory failed error='Cannot allocate memory'
image.png

我们的服务器没有启用swap交换空间, 解决办法是给服务器设置一个SWAP分区, 就是说牺牲一部分磁盘存储来保证部分程序正常运行所需要的运行内存。

以64G内存的服务器,加8G的swap分区为例:

要生成一个 8G 的 swapfile 文件,可以使用以下命令:
dd if=/dev/zero of=swapfile bs=1024 count=8388608
这里的计算方式是,1GB 等于 1024MB,1MB 等于 1024KB,1KB 等于 1024 字节,所以 8GB = 8×1024×1024×1024 字节。
dd 命令中的 bs(block size)为 1024 字节,count 则是块的数量。
8×1024×1024×1024÷1024 = 8388608,所以 count 设置为 8388608 即可生成一个 8G 的 swapfile 文件。

# mkdir  /data/swap/
# cd    /data/swap/
# dd if=/dev/zero of=swapfile bs=1024 count=8388608
# chmod  0600 swapfile
# mkswap swapfile
# echo  "/data/swap/swapfile      none     swap sw      0 0"   >> /etc/fstab
# free -h
              total        used        free      shared  buff/cache   available
Mem:           63Gi        45Gi       4.4Gi       1.8Gi        13Gi       7.0Gi
Swap:         8.0Gi        20Mi       8.0Gi

在什么时候swap交换内存会被使用呢?

我们看个 内核空间交换分区利用参数:

# cat /proc/sys/vm/swappiness
30

swappiness=0 的时候表示最大限度使用物理内存,然后才是swap空间;
swappiness=100 的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面,那么我们的是30,也就是说当内存使用到30%的时候(其实是个倾向度的意思),swap开始被启用。

参考

给Linux分配多少Swap空间才够呢?
https://www.jianshu.com/p/12e25ea172de

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory failed error='Cannot allocate memory'
https://www.jianshu.com/p/ce3c6546a9c2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容