这个系列应该改个名字,叫做java 命令行窗口(运行在windows环境下)突然退出,但是端口号存在,java虚拟机进程也存在。 昨天出差到客户现场一番排查。排除了之前的一系列推测(根据程序日志发现,程序异常退出是有...
这个系列应该改个名字,叫做java 命令行窗口(运行在windows环境下)突然退出,但是端口号存在,java虚拟机进程也存在。
昨天出差到客户现场一番排查。排除了之前的一系列推测(根据程序日志发现,程序异常退出是有规律的,每3小时一次,在57分异常退出)
- 内存溢出:程序退出后未生成dump文件,且用jconsole显示内存一直正常。
- 客户计算机是否有异常:查看系统日志、cpu,内存(发生问题时间点的)都一切正常。
- 网络请求http连接未释放,连接池占满假死:程序已经优化,排除httpclient使用问题导致连接异常,且在cmd下查看netstat显示正常。
- 数据库连接未回收,卡死:优化数据库连接配置参数,并查看发生故障时的连接,显示正常。
就在我一筹莫展,几近放弃的时候客户UPS有问题,意外让服务器重启使我找到了问题的所在。
程序重启后,有些开机自动运行程序,这时候我手贱在cmd下用命令netstat -ano|findstr 8083(我的程序端口),竟然以为的发现,是启动着的。。。。。。。。。。。而我的程序是没有配置开机自动运行的,这个时候我才想起来会不会是有其他程序跟我是一样的端口。(我之前也不是没有想到过端口占用的问题,但是我的命令行程序在端口被占用状况下,运行后没几秒就会自动退出,然后在错误日志种提示 Address is already benn used,然而这个搞笑的是,我的程序如果先启动,另外一个也是用8083端口的程序后启动,他是个exe程序,不会自动退出,但是另外会启动一个守护进程,每3个小时查看一次,然后把我的程序给干掉了,把他的程序给启动起来)因此每次我查看netstat的时候,发现8083端口还在,给我问题排查产生了误解。现在想想问题原因很坑爹,但是排查过程当中也不是没有收获,在这些弯路之中,更深入的了解了jvm、httpclient连接池、数据库连接池相关的知识。
至此,问题得到解决
本文标题为:java内存泄漏问题排查(三)
- 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
- Java中的日期时间处理及格式化处理 2023-04-18
- 深入了解Spring的事务传播机制 2023-06-02
- Springboot整合minio实现文件服务的教程详解 2022-12-03
- JSP 制作验证码的实例详解 2023-07-30
- Java实现顺序表的操作详解 2023-05-19
- JSP页面间传值问题实例简析 2023-08-03
- ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
- SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
- Spring Security权限想要细化到按钮实现示例 2023-03-07