linux超内存自动杀进程问题

linux超内存自动杀进程问题

最近搭完oj系统,出现一运行判题机此博客进程便会莫名其妙的被杀掉导致博客无法运行(oj跟此博客是搭在同一台服务器上的。)
百度很久没有结果,查看/var/log/message发现
image.png
当 Linux 系统内存不足时,系统会把当前系统占用系统内存过高的进程当做流氓进程,然后系统发出信号将这个流氓进程杀掉,最后导致 Java 应用服务不能使用

解决方法

解决方法
方法1:通过调整 JVM 参数限制最大可使用内存
方法2:启用 swap 分区
方法3:增加物理内存或增加机器
方法4:将应用分配到压力较小的服务器上

这里重点讲解方法二

启用 swap 分区

swqp分区介绍

在Linux系统中的SWAP(交换分区),类似于Windows系统的虚拟内存。系统会把一部分硬盘空间虚拟成内存使用,将系统内非活动内存换页到SWAP,以提高系统可用内存。
注:如果您使用普通云盘,不建议使用SWAP分区。如果是高效云盘或SSD云盘,可以根据实际情况使用SWAP分区。

swap配置

  1. 以root用户身份,通过远程连接登录Linux实例,执行以下命令,创建用于交换分区的文件。
dd if=/dev/zero of=/mnt/swap bs=block_size count=number_of_block

注:block_size、number_of_block大小可以自定义,比如bs=1M count=1024代表设置1G大小SWAP分区。
2. 执行以下命令,设置交换分区文件。

mkswap /mnt/swap

linux超内存自动杀进程问题_第1张图片

  1. 执行以下命令,启用交换分区文件。
swapon /mnt/swap

linux超内存自动杀进程问题_第2张图片
linux超内存自动杀进程问题_第3张图片
注:如果在/etc/rc.local中有swapoff -a需要修改为swapon -a。

  1. 设置开机时自启用SWAP分区,需要修改文件/etc/fstab中的SWAP行,添加以下代码。
/mnt/swap swap swap defaults 0 0

linux超内存自动杀进程问题_第4张图片
注:/mnt/swap路径可以修改,可以根据创建的SWAP分区文件具体路径来配置。

  1. 执行以下命令,临时修改swappiness参数值,此处以空闲内存少于10%时才使用SWAP分区为例。
    提示:在Linux系统中,可以通过查看/proc/sys/vm/swappiness内容的值来确定系统对SWAP分区的使用原则。当 swappiness内容的值为0时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用SWAP分区。当swappiness内容的值为100时,表示积极地使用SWAP分区,并且把内存中的数据及时地置换到SWAP分区。查看修改前为0,需要在物理内存使用完毕后才会使用SWAP分区。
echo 10 >/proc/sys/vm/swappiness

image.png

  1. 若需要永久修改此配置,在系统重启之后也生效的话,通过vim命令编辑/etc/sysctl.conf文件,并增加以下内容。
vm.swappiness = 10
  1. 执行以下命令,验证添加成功。
sysctl -p
  1. 使用free命令查看内存情况
    image.png
    可以看到swap交换分区已经成功添加。

关闭swap分区

当系统出现内存不足时,开启SWAP可能会因频繁换页操作,导致IO性能下降,可以采用以下方法,关闭SWAP分区。

  1. 执行以下命令,查询SWAP分区设置。
free -m

image.png

  1. 执行以下命令,关闭SWAP分区。
swapoff [$SWAP_File]

注:[$SWAP_File]SWAP分区标识。
image.png

你可能感兴趣的:(杂文,linux,服务器,运维,内存管理)