linux下tomcat进程莫名奇妙的停止,并且查看catalina.out日志无任何异常...
发布网友
发布时间:2022-04-28 17:07
我来回答
共3个回答
热心网友
时间:2022-04-14 06:20
你需要看tomcat的日志catalina.out的弹出的日志,如果有错误,那就照着错误来修改。
1,你看下ps axu tomcat起来没起来,如果没起来,那说就找tomcat的原因。tomcat的进程就是java那个
2,如果起来了。你telnet 本地ip 8080 如果进去了,然后quit再出来,说明端口开了,没问题。或者用 netstat -lnp 看看8080端口的tcp有没有listening。没有的话,说明tomcat没有正确启动,里面肯定蹦了不少错误。
3,如果都起来了,你看看你的ip配的对不对,DNS配的对不对,DNS的写在 /etc/reslove里面,没有DNS连不了外面,但是外面能连你。
我觉得你能ping通说明网络配置没问题,很有可能是tomcat的配置有问题,多看日志,从日志里分析错误,然后再拿出百度,Google搜索一下。
追问tomcat能起来,端口是80,能访问,但是过一个小时之后就自己停掉了。ps aux观察也没有了tomcat进程,不知道是怎么回事。
热心网友
时间:2022-04-14 07:38
linux 系统内存满了自动杀了不受保护的线程,
Linux OOM Killer
在这里有一个关于OOM Killer的描述
It is the job of the linux 'oom killer' to sacrifice one or more processes in order to free up memory for the system when all else fails. It will also kill any process sharing the same mm_struct as the selected process, for obvious reasons. Any particular process leader may be immunized against the oom killer if the value of its /proc/<pid>/oomadj is set to the constant OOM_DISABLE (currently defined as -17).
长话短说就是,Linux Kernel的这个Killer,会在内存不足的时候kill掉任何不受保护的进程,从而释放内存,保证Kernel的运行。
要让自己的进程成为一个受保护的进程,请注意这一句:
Any particular process leader may be immunized against the oom killer if the value of its /proc/<pid>/oomadj is set to the constant OOM_DISABLE (currently defined as -17).
操作方式上可以使用
echo -17 > /proc/$PID/oom_adj
更多可以参考这个网页(OOM Killer - How To Create OOM Exclusions in Linux - Backdrift)
,写一个定时任务,执行脚本,把当前进程的Pid加到这个oomadj里。
那怎么判断进程是不是被OOM Killer给干掉了呢?
可以从/var/log/messages这个文件里查找下,是否有之前pid对应的进程Kill信息,或者进程名,比如我们这里说的是Java应用,就直接查Java的就可以,像
这样的内容,
"Out of memory: Kill process 31201 (java) score 783 or sacrifice child
如果没有这个文件的权限,也可以直接使用如下命令
dmesg | egrep -i 'killed process'
会有类似这样的输出
Killed process 13090 (java)
知道是被OOM Killer干掉的,那下一步就只能是保证环境的内存够用了,少被其它程序占用,加到受保护进程里,或者直接换个内存充足的服务器吧。 ^_^.
热心网友
时间:2022-04-14 09:13
HI,你好,我最近也在研究tomcat的问题。在linux上,也是运行一段时间后无故服务停止,还没有长到原因。所以想请教下你,你的问题解决了吗?是什么问题造成的!3Q!或者我们一起讨论下!