SpringBoot后台运行过程中被Killed的情况处理@杨章隐
最近为了速度把游戏的所有变量和数据都保存在静态属性里面
跑了一段时间后运营却时常反馈给我游戏挂了,用报警脚本检测,基本每天都会服务停止,查看进程log 发现最后执行倒计时的时候只有一句:killed
最早排查以为是磁盘或者内存不足(毕竟可能因为变量太大,导致内存溢出等问题)
检查后发现内存是足够的,磁盘也是足够的
通过swap分区来解决
swap分区:Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
在阿里云的swap分区默认是0
创建方式:
1.进入root权限(如果本身是Root账户可以跳过这步)
sudo -i
2. 创建swap 分区
dd if=/dev/zero of=/swap_file bs=1M count=8192
注意:此文件的大小是count的大小乘以bs大小,上面命令的大小是8GB,这个过程可能需要等一会儿。
3 通过mkswap命令将上面新建出的文件做成swap分区
mkswap /swap_file
4 启用交换分区
swapon /swap_file
5 设置开机自动挂载
vim /etc/fstab
在文本中加入以下内容并保存。
/swap_file swap swap defaults 0 0
6 查看内核参数vm.swappiness中的数值是否为0,如果为0则根据实际需要调整成30或者60
cat /proc/sys/vm/swappiness
我的是0,我改成了60,通过执行
sysctl -w vm.swappiness=60
这里需要简单说明下,在Linux系统中,可以通过查看/proc/sys/vm/swappiness内容的值来确定系统对SWAP分区的使用原则。当swappiness内容的值为0时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用SWAP分区。当swappiness内容的值为100时,表示积极地使用SWAP分区,并且把内存中的数据及时地置换到SWAP分区。注:若想永久修改,则编辑/etc/sysctl.conf文件
我们这里设置的50,就表示当物理内存少于50%时便使用交换分区。
7.关闭swap分区
swapoff /swap_file
8. 关于多个交换分区在使用上的优先级
如果你有多于一个交换文件或交换分区,你可以给它们各自分配一个优先级值(0 到 32767)。系统会在使用较低优先级的交换区域前优先使用较高优先级的交换区域。例如,如果你有一个较快的磁盘 (/dev/sda) 和一个较慢的磁盘 (/dev/sdb),给较快的设备分配一个更高的优先级。优先级可以在 fstab 中通过 pri 参数指定:
/dev/sda1 none swap defaults,pri=100 0 0
/dev/sdb2 none swap defaults,pri=10 0 0
如果两个或更多的区域有同样的优先级,并且它们都是可用的最高优先级,页面会按照循环的方式在它们之间分配。
最终解决方案:
首先移除所有保存在变量的值,因为这种处理方法是基于原有的较少用户下的解决方案。
排查完整的堆栈信息,看看哪里的变量过大导致内存溢出,将该变量移除,引入redis等外部机制,将这个变量的数值保存到redis中,从根本上解决。
参考:springboot应用无故停止运行killed解决方法 - 沐风T - 博客园
说明:内容部分转载,如有侵权请联系删除
SpringBoot后台运行过程中被Killed的情况处理@杨章隐相关推荐
- FAQ:Springboot项目运行过程中java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
原因是jar包在运行过程中因为要调试被我mvn package重新编译了,程序依赖的包变化导致运行时错误. 2019-07-18 17:01:59.913 DEBUG 21687 --- [0.0-7 ...
- 内存管理——程序运行过程中内存的作用以及如何与cpu、os交互
今年以来,内存条价格暴涨,已经跃升为新的新一代理财产品,所以今天就和大家讨论一下内存条的话题,主要内容就是在程序运行过程中,内存的作用以及如何与CPU,OS交互. 我们先来讨论:计算机的运行究竟是在做 ...
- 操作系统中进程并发运行的过程_三种电磁流量计运行过程中常见故障解决详情!...
原标题:三种电磁流量计运行过程中常见故障解决详情! 昨天给大家介绍了电磁流量计的一些典型故障,今天我们继续来谈电磁流量计的故障问题!电磁流量计在正常的保养与维护之后,在正常使用的过程中依旧是会因为当时 ...
- 程序运行过程中遇到“ORA-03114: not connected to ORACLE”的问题解决
程序运行过程中遇到"ORA-03114: not connected to ORACLE"的问题解决 参考文章: (1)程序运行过程中遇到"ORA-03114: not ...
- python运行过程中会被编译成二进制_Python代码在运行过程中,会被编译成二进制代码。_学小易找答案...
[单选题]1. ( )是违反设备安全操作规程的错误做法. [单选题]Thank you for your letter ___________ 24th March. (1.0分) [单选题]超外差接 ...
- Intel Realsense D435 当摄像头运行过程中突然USB线断开,对RuntimeError: Frame didn't arrived within 5000的异常捕获及处理
如图,在摄像头运行过程中,摄像头突然断开,可能设备需要对异常进行捕获并处理(如摄像头重连,发出警报,发送信号给车辆让它停止前进等) 需阅读,python异常捕获及处理 191225 通过捕获所有异常, ...
- 小程序执行运行过程原理_活性污泥法基本原理、净化反应过程、工艺类型和运行过程中存在的问题...
↑ 点击上方"表面活性剂平台"关注我们 活性污泥法实质上是天然水体自净作用的人工强化,能从污水中去除溶解态和胶体态的可生物降解有机物以及能被活性污泥吸附的悬浮固体和其他物质,具有对 ...
- java程序中可以如何异常处理?_如何处理罗茨鼓风机在运行过程中出现异常噪音和叶片的运行特性...
罗茨鼓风机叶片的运行特性: 1.后叶片类型的叶片突出而重要的特点是无过载功率.它消除了对超大电机或其他驱动器的需求.常规叶片的正常工作静态效率范围为65-80%,流线型设计的通常工作静态效率范围为80 ...
- Jmeter运行过程中如何让Fiddler同时可以抓获到服务器的应答报文
在默认情况下,Jmeter运行过程中,Fiddler是抓不到对应的应答报文的. 但是,在某些时候,我们希望分析Jmeter执行失败的原因,想了解Jmeter获取到的应答报文是否有问题,就需要同服务器返 ...
最新文章
- 【CVPR 2020】神经网络架构搜索(NAS)论文和代码汇总
- 后浪们 : 难道要先结婚后恋爱?
- 【poj2187】 Beauty Contest
- vue 同时执行两个函数 点击_【第2112期】 import { reactive } from #39;vue#39;
- Kaneboy:临时启事:寻找在北京,熟悉SPS、ASP.NET,有两周空闲时间的朋友
- pat09-散列3. Hashing - Hard Version (30)
- secp256k1 php,区块链中的数学-secp256k1 签名可锻性以及解决方案
- HTTPS 加密算法原理详解
- 16_使用开源项目下载文件
- ECCV学习(一):ECCV2018整理总结
- centos怎么启动linux系统时间,查看Centos系统最近一次启动时间和运行时间
- endnotex7怎么导入中文文献_EndNote导入CNKI文献的方法 | 科研动力
- A-B(字符串问题)
- 颠覆传统股票证券市场的可能是ICO代币(TOKEN)
- python程序基础知识(一)
- 用python画猫和老鼠_一个Python游戏:猫和老鼠
- 费马小定理及MR素数判断
- 吴恩达机器学习系列15:学习曲线
- python程序扩展名 py、pyc、pyo、pyd文件区别
- 汽车指示器数字仪表盘logo标志AE视频模版免费下载【56期】
热门文章
- 煽情的儿子553=随笔
- 申请无数个iTunes 帐号的简易方法
- Voice Over 使用总结
- 公司网站应怎样做优化标梵互动
- 从跟风断舍离到开启新的人生
- touchesBegan: withEvent: 不执行/完美收起键盘
- C#中GridView控件的使用
- android 0时区时间格式,Android DateUtils.formatDateTime时区错误
- 【YOLOv5-6.x】设置可学习权重结合BiFPN(Concat操作)
- JSP图书销售系统JSP网上书店商城JSP网上书店JSP图书在线销售系统JSP二手图书商城系统