服务器java内存不断升高,进程不断增加

夜里执行完定时任务之后,是这样的

image.png

白天没有定时任务执行,下午看的时候莫名其妙又多了个进程

image.png

不知道为什么莫名其妙就又起一个42176,按照百度的方法分析了一下其中的某个线程,完全看不懂,也不知道到底是哪里的代码产生这种问题的

image.png

image.png

公司也没人管这玩意,只能我这个刚入行4个月的java小白慢慢分析了.分析到这实在分析不下去了.看不到一个写过的熟悉的类,定位不到到底是程序哪里出了问题

定时任务就这些

cron4j=syncHikData,BaseDataJob,ResetTask,ViewTask,syncHostelDate,syncHostelChackDate,sysncHostelManagerDate


#两分钟执行一次
#syncHikData.cron=*/2 * * * *
#两小时执行一次
#syncHikData.cron== 1 0/2 * * *
#每天1.20;7.20执行一次
syncHikData.cron=20 1,7 * * *
syncHikData.class=com.kingen.pis.cro4j.SyncHikDataTask
syncHikData.daemon=true
syncHikData.enable=true

BaseDataJob.cron=30 1 * * *
BaseDataJob.class=com.kingen.pis.cro4j.SyncBaseDataTask
BaseDataJob.daemon=true
BaseDataJob.enable=true

ResetTask.cron=0 0 * * *
ResetTask.class=com.kingen.pis.cro4j.ResetTask
ResetTask.daemon=true
ResetTask.enable=true

ViewTask.cron=10 0 * * *
ViewTask.class=com.kingen.pis.cro4j.ViewTask
ViewTask.daemon=true
ViewTask.enable=true

syncHostelDate.cron=0 22 * * *
syncHostelDate.class=com.kingen.pis.cro4j.SyncHostelDateTask
syncHostelDate.daemon=true
syncHostelDate.enable=true

syncHostelChackDate.cron=50 21 * * *
syncHostelChackDate.class=com.kingen.pis.cro4j.SyncHostelChackDateTask
syncHostelChackDate.daemon=true
syncHostelChackDate.enable=true

sysncHostelManagerDate.cron=0 23 * * *
sysncHostelManagerDate.class=com.kingen.pis.cro4j.SysncHostelManagerDateTask
sysncHostelManagerDate.daemon=true
sysncHostelManagerDate.enable=false

根据波总的提示,我百度了一下命令,看看进程是由谁启动的

image.png

目前进度在这里.....emmmm.还是看不懂.但是好像是tomcat启动的都

2019-09-06 10:17

今早过来一看,进程又多了一个..作为一个刚入门4个月的小白实在是心碎啊.我刚看了一下catalina.out. 昨晚下班的时候6点,我重新打了下jar包到服务器,然后shutdown了下,又restart了.就走了.其实日志报了这些从来没看过的东西

image.png

image.png

image.png

image.png

image.png

还有在凌晨执行的定时任务又报错!.!!!!!!!!!!!!!报错信息如下

image.png

image.png

后面定时任务只要执行,都会报这种类似的错误.以前也没有过.上次说是quart不是守护线程,停止tomcat,关不掉定时任务,然后换了个cron4j的定时任务,现在报这个错...头好大啊..完全没头绪

评论区

洛小风

2019-09-05 14:24

这些定时任务,基本都是拉数据,查数据,插数据,还有逻辑判断的

JFinal

2019-09-05 16:14

你得先查出是哪个地方新创建了进程,逐步解决

注意:cron4j 是不会创建 "进程" 的, 它只会创建 "线程"

而你碰到的问题表明,是有新的 "进程" 被启动,这个很好查

洛小风

2019-09-05 16:44

@JFinal 谢谢波总,的确,cron4j是只会创建线程..您说的有新的进程被启动,很好查,可否提供下思路,怎么查~然后我去想办法,.谢谢您

洛小风

2019-09-05 17:05

目前更新了个图片

JFinal

2019-09-05 23:28

@洛小风 linux 系统开机自启动、定时启动无非就那么几种手段,搜索一下

都已经知道被启动的对象是 tomcat 以及那两个 jar 包了,找这个已经很容易了

建议你先问问公司的人,是什么脚本启动了这些东西

洛小风

2019-09-06 10:32

@JFinal 我们是帮学校做的一个小项目把.部署在人学校服务器上的..公司人没写什么脚本.就之前写过几个quart定时任务,用来从海康接口拉人脸识别数据,等等,然后写入数据库,在写一些逻辑判断的.后来不是发现停tomcat,关不掉这些定时任务的线程吗.就换了cron4j.设置为守护线程.现在定时任务执行,就会报我上面发的一些错误......定时任务仍然能执行.头好大..

JFinal

2019-09-06 11:16

@洛小风 可能是因为关闭 tomcat 时没真正关掉,定时任务一直还在

此外,还要注意一个事,java 代码虽然绝大多数是创建 "线程",但也可以创建 “进程”,例如:
String cmd = "D:/path/game.exe";
Runtime.getRuntime().exec(cmd);

要找到项目中这类代码并进行妥当处理

洛小风

2019-09-24 09:44

@JFinal 上次问题解决了,忘记来更新了,其实和代码没有任何关系.完全是因为我每次打包项目,然后部署到服务器的时候,我都做了一个操作,就是先shutdown.sh 然后在startup.sh,这样子导致了tomcat没有关闭,即没掉java进程,我又 startup了一个新的java进程,每次部署一次,都起一个进程.虽然不知道为什么关不掉,但是后来我不在做这两个操作了.我直接把war包删掉,上传新war包,tomcat会自动编译新的war包,不需要重启.问题解决了~

JFinal

2019-09-24 11:54

@洛小风 使用 jfinal-undertow 这些事都将不存在:
https://www.jfinal.com/doc/1-2

何必还去折腾 tomcat

热门反馈

扫码入社