java服务自动停止原因查找方式

 更新时间:2023年12月02日 08:59:24   作者:---清心寡欲---  
这篇文章主要介绍了java服务自动停止原因查找方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

现象

最近发现服务java启动了几天就自己停了,然后查看了,是内存不足造成的。

1.查看是否是由于内存不足造成的

命令:

cd /var/log
cat messages* |grep java

发现有:Out of memory: Kill process 58235 (java) score 231 or sacrifice child

由于内存不足,系统自动kill了java的进程

2.查看内存使用功能情况,确实所剩不多了

free -h

以下是解决方案

之前买了个云服务器玩,不过是最低配置的1核1G,后来发现这个内存太小了,随便装几个软件就不行了,内存消耗较大的像 redis 运行起来很多问题。

这些时间了解了下 docker 容器,去尝试了下发现 mysql 就挂了,而且怎么样也启动不了了,后来发现是内存实在是不够了

后来网上了解,如果服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择。当然这个选择是在你对访问速度和缓存那些没什么要求的情况下,比如你自己测试玩的

虚拟内存一般设置为物理内存的2倍即可

新增swap分区

这里使用文件作为swap分区 ,下面操作需要在root用户下操作

使用 free -h 查看当前内存占用情况,可以看到物理内存所剩无几,下面的swap也是使用的文件作为虚拟内存使用的

91e2a2b6de8711fead14d752f42c4312.png

创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小),如下面是2G

# dd if=/dev/zero of=/root/swapfile2 bs=1M count=2048

这里我使用的of为/root/swapfile2 ,可以看到该文件是新创建的,这时候这个文件还不能直接使用为swap文件

修改文件权限,如不修改,在启用swap文件的时候会提示下面信息(不影响使用,建议修改)

# chmod 0600 /root/swapfile2

格式化为交换分区文件,建立swap的文件系统,/root/swapfile2需要与上面的of的值一致,这个目录可以自定义

# mkswap /root/swapfile2

启用swap文件:

# swapon /root/swapfile2

可以看到未启用时虚拟内存为2G,启用后内存增加了2G

使系统开机时自启用

# vim /etc/fstab

在文件/etc/fstab中添加一行

/root/swapfile2 swap swap defaults 0 0

调整swap空间使用的优先级

如果内存够大,应当告诉 linux 不必太多的使用 SWAP 分区, 可以通过修改 swappiness 的数值。

swappiness=0 的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

各个操作系统的优先级可能都不一样,如果不调整,你会发现添加的虚拟内存几乎没有用到

查看当前swappiness值

# cat /proc/sys/vm/swappiness

修改swappiness值为60(临时修改,重启后即还原为默认值)

# sudo sysctl vm.swappiness=60

永久修改swappiness默认值(重启生效)

# vim /etc/sysctl.conf

找到vm.swappiness ,如果没有则需要手动添加一行 vm.swappiness = 60 保存即可

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java单元测试实践(Mock)

    Java单元测试实践(Mock)

    本文介绍了单元测试、JUnit、Spring相关注解、Mockito、断言库的使用方法,涵盖MockMvc、@Mock、@MockBean、@Spy、@InjectMocks、@ParameterizedTest、@CsvSource、@ValueSource、@MethodSource等,介绍了Mock的概念及用途,重点讲解了单元测试的步骤、MockMvc的使用
    2026-04-04
  • java http请求获取图片并返回文件流给前端的方法步骤

    java http请求获取图片并返回文件流给前端的方法步骤

    作为一名Java后端开发者,掌握如何从后端返回文件流至前端是基本技能之一,这篇文章主要介绍了java http请求获取图片并返回文件流给前端的方法步骤,需要的朋友可以参考下
    2024-09-09
  • 解决Maven build打包,类找不到,找不到引用的那个项目里面的类问题

    解决Maven build打包,类找不到,找不到引用的那个项目里面的类问题

    文章讨论了在使用Maven构建项目时遇到类找不到的问题,并给出了解决方法,主要原因是公共项目被打成了可执行的jar,导致其他项目无法引用其中的类,解决方法包括在公共项目的pom中将打包类型改为普通jar,以及在主项目中正确引用公共项目
    2026-02-02
  • 详解Java 自动装箱与自动拆箱

    详解Java 自动装箱与自动拆箱

    这篇文章主要介绍了Java 自动装箱与自动拆箱的相关资料,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-09-09
  • SpringBoot选择自有bean优先加载实现方法

    SpringBoot选择自有bean优先加载实现方法

    在一些需求中,可能存在某些场景,比如先加载自己的bean,然后自己的bean做一些DB操作,初始化配置问题,然后后面的bean基于这个配置文件,继续做其他的业务逻辑。因此有了本文的这个题目
    2023-03-03
  • 基于@RequestMapping 用法详解之地址映射

    基于@RequestMapping 用法详解之地址映射

    这篇文章主要介绍了@RequestMapping 用法详解之地址映射,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Log4net 日志记录详细介绍及应用

    Log4net 日志记录详细介绍及应用

    这篇文章主要介绍了Log4net 日志记录详细介绍及应用的相关资料,需要的朋友可以参考下
    2017-02-02
  • java去除中文括号小括号,或者英文括号的实例代码

    java去除中文括号小括号,或者英文括号的实例代码

    这篇文章主要介绍了java去除中文括号小括号,或者英文括号的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java获取当前时间方法总结

    Java获取当前时间方法总结

    本篇文章给大家整理了关于Java获取当前时间方法,以及相关代码分享,有需要的朋友测试参考下吧。
    2018-02-02
  • 关于ZooKeeper原理剖析

    关于ZooKeeper原理剖析

    ZooKeeper是一种分布式、高可用性的协调服务,主要用于帮助系统避免单点故障和建立可靠的应用程序,它通过Leader、Follower和Observer的角色来协调节点,并提供分布式协作服务和维护配置信息,ZooKeeper在HDFS、YARN、HBase、SmallFS和Kafka等大数据产品中都有广泛的应用
    2025-02-02

最新评论