有个springboot服务,运行一段时间后服务器ssh都连不上了,这会是什么原因导致的?
运行一段时间服务占内存会很大
在本地telnet服务端口都不通
telnet 127.0.0.1 8082
重启服务之后问题会消失,但是运行一段时间又会重现
回答:
telnet端口不通,大概率是服务停止了,这时候可以使用ps命令检查进程是否还活着,大概率进程已经不在了,然后检查服务日志,oom一般都会有日志输出错误信息。
至于你说的占内存很大,这个具体的数值是多少,java服务的内存分配是在启动的时候通过xmx,xms,xss这些jvm参数进行配置的,java进程占用内存是有上限的,是可配置的,到达了上限,就会因为内存不足而停止程序。
可以观测一下系统可用的内存,java配置的内存,实际占用的内存这些数值,可以简单的用top/free命令观测下内存变化,或者使用jmap展开具体的堆栈情况,寻找主要的占用代码。
以上是比较基本的检查java运行和jvm相关的思路,具体的命令可以百度一下,包括jvm各种线上参数,都可以了解一下,对于java程序员来说,比较重要,写代码只是一部分,能用才是最重要的。
至于ssh连不上,因为ssh命令是系统级别的独立进程,默认是22端口,原则上和其他进程没有关系,比如java程序,如果真的是ssh连接不上,那可能和你的程序没啥关系,更多可能是操作系统或者硬件有问题,我遇到过机房温控失灵,夏天一升温,服务器就挂了
当然也不排除你的程序涉及了很多底层操作或者就是内存分配不合理,导致直接做掉了操作系统
回答:
服务有内存泄漏?
回答:
ssh不通你是去机房重启的吗?
单说这个问题,应该就是内存泄漏了。
可以启动参数加上-XX:+PrintGCDetails 看一下垃圾回收情况。
再就是多长时间开始卡,提前一会去dump一下进程的内存情况看看。
回答:
是不是用了全局静态hashmap然后程序时不时会往这个hashmap里put数据?
以上是 有个springboot服务,运行一段时间后服务器ssh都连不上了,这会是什么原因导致的? 的全部内容, 来源链接: utcz.com/p/945219.html