问题定位:tomcat下logs日志都看过,没有任何出现异常日志输出,同项目下所有应用在同一台机器上,怀疑可能是资源不够问题导致,但是其它应用可正常启动,无此问题,经过比较后发现mock系统catalina.sh里未配置JAVA_OPTS="-Xms1024m -Xmx1024m -Xss1024K",而其它项目里有,加上后重启,问题不再复现。
疑问:如果是启动过程中内存不够应该会报内存溢出等问题,实际没有,请教运维提供查看系统日志得方式定位。
问题分析:再去掉堆内存配置等信息复现下问题,观察系统日志
journalctl -xe >>1.log
发现有进程被kill掉。
为了理解这个错误,我们先回顾一下 *** 作系统相关的基氏纤唤础知识。
我们知道, *** 作系统(operating system)构建在进程(process)的基础上. 进程由内核作业(kernel jobs)进行调度和维护, 其中有一个内核作业称为 “Out of memory killer(OOM终结者)”, 与本节所讲的 OutOfMemoryError 有关。
Out of memory killer在可用内存极低的情况下会杀死某些进程。只要达到触发条件就会激活,选中某个进程并杀掉。 通常采用启发式算法, 对所有进程计算评分(heuristics scoring), 得分最低的进程将被 kill 掉。因此 Out of memory: Kill process or sacrifice child和前面所讲的 OutOfMemoryError 都不同,因为它既不由JVM触发,也不由JVM代理, 而是系竖枝统内核内置的一种安全保护措施。
默认情况下, Linux kernels(内核)允许进程申请的量超过系统可用内存. 这是因为,在大多数情况下, 很多进程申请了很多内存, 但实际使用的量并没有那么多. 有个简单的类比,宽带租赁的服务商, 可能他的总带宽只有 10Gbps, 但却卖出远远超过100份以上的 100Mbps 带宽, 原因是多数时候, 宽带用户之间是错峰的, 而且不可能每个用户都用满服务商所承诺的带宽。
这样的话,可能会有一个问题, 假若某些程序占用了大量的系统内存, 那么可用内存量就会极小, 导致没有内存页面(pages)可以分配给需要的进程。可能这时候会出现极端情况, 就是 root 用户也不能通过 kill 来杀掉流氓进程. 为了防止发生这种情况, 系统会自动激活 killer, 查找流氓进程并将其杀死。
总结下来就是,tomcat启动未配置堆内存时,tomcat会无限的申请内存,申请到一定容量时候,触发了killer进程,killer进程根据算法清除掉了当前的tomcat进程。
1. 首先,右键电脑桌面上的“此唯激举电脑”图标,在d出选项中点击“管理”指碧。2. 进入计算机管理窗口后,点击窗口左侧列的“事件查看器”。
3. 此外,我们也可以同时按住“win”+“R”键,打开运行窗口,在窗口文本框中输入“eventvwr.msc”,再按下回车键。
4. 进入事件查看器窗口后,点击窗口左侧列的“Windows日志”。
5. 接着,再点击其下的“系统”选项,之后在打开的页面中间就会显示系统日志。
6. 点击窗口右侧的“筛选当前日志”,出现下图二所示窗口后,根据自身需要铅岁进行筛选即可。
运行---cmd----systeminfo有一行为“系统启动时间”
其描述的为开机到现在的总时间
在Windows XP中,我们可以通过“事件查看器”的事件日志服务查看计算机的开、关机时间。因为事件日志服务会随计算机一起启动和关闭,并在事件日志中留下记录。
在这里有必要介绍两个ID号:6006和6005。在事件查看器里ID号为6006的事件表示事件日志服务已停止,如果你没有在当天的事件查看埋碰器中发现这个ID号为6006的事件,那么就表示计算机没有正常关机,可能是因为系统原因或者直接按下了计算机电源键,没有执行正常的关机 *** 作造成的。当你启动系统的时候,事件查看器的事件日志服务就会启动,这就是型派ID号为6005的事件。
通过这两个ID号保存的信息,我们可以轻松查看计算机开、关机记录:打开“控制面板”,双击“管理工具”,然后打开“事件查看器”,在左边的窗口中选择“系统”选项。单弯租谈击鼠标右键,在d出的快捷菜单中选择“属性”,在打开的“系统属性”窗口中选择“筛选器”选项卡,在“事件类型”下面选中“信息”复选项,并在“事件来源”列表中选择“eventlog”选项,继续设定其他条件后,单击“确定”按钮,即可看到需要的事件记录了。双击某条记录,如果描述信息为“事件服务已启动”,那就代表计算机开机或重新启动的时间,如果描述信息是“事件服务已停止”,即代表计算机的关机时间。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)