• centos系统中java进程总会莫名被kill


    场景:用springboot 开发的一个java程序部署到服务器上面,运行一段时间之后, 发现进程突然消失,没有错误日志打印,也没有内存溢出。查看服务器的状态还有部分内存。

    原因:一直以为是程序问题导致的内存不够,程序挂掉了,各种查找之后发现并没有内存泄漏的问题,后来通过网上搜索可能是linux自动把进程杀掉了,查看被系统杀掉进程日志的命令:  egrep -i -r 'killed process' /var/log (只有root权限才可以查看),发现确实有被杀掉的进程,而且时间也对的上,到这知道原来是linux杀掉的进程。后来通过和我们运维了解,linux 会检测内存的变化,如果发现内存使用过大的进程,会被杀掉,保护系统正常运行。

    解决:我和我们运维的同学反馈之后,他们说可以通过加大虚拟内存解决问题(当linux的内存不够的时候,会使用虚拟内存swap),我们当时服务器的swap内存为512m ,后面加到了2G,后面进程被杀掉的情况发生的就很少了(我们服务器实际内存本身就是太小,很容易就溢出)

    free -lm 命令查看实际内存大小(实际和虚拟)

    Centos配置swap交换空间

    使用swap将硬盘当做内存使用,解决内存容量不足的问题

    查看内存使用的状态:free -h

    创建一个分区文件(bs每块的大小,count文件有多少块,这里的swap就是2G

    dd if=/dev/zero of=/opt/swap bs=1M count=2048

    将/opt/swap文件设置为swap分区文件

    mkswap /opt/swap

    进行swap文件的权限修改

    chmod 600 /opt/swap

    激活swap,启动分区交换文件

    swapon /opt/swap

    此时查看free -h,成功

    卸载虚拟内存的方式:

    查看swap

    cat /proc/swaps

    停止swap分区

    swapoff /opt/swap

    然后删除swap文件

    rm -rf /opt/swap

    参考:https://blog.csdn.net/zxy144/article/details/112545350


     

  • 相关阅读:
    Java实现 LeetCode 32 最长有效括号
    Java实现 LeetCode 31下一个排列
    Java实现 LeetCode 31下一个排列
    Java实现 LeetCode 31下一个排列
    Java实现 蓝桥杯 素因子去重
    Java实现 蓝桥杯 素因子去重
    Java实现 蓝桥杯 素因子去重
    Java实现 LeetCode 30 串联所有单词的子串
    Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法
    MFC不使用对话框资源模版创建对话框
  • 原文地址:https://www.cnblogs.com/lingwang3/p/14898154.html
Copyright © 2020-2023  润新知