jar包在windows的启动方式以及jar包窗口启动假死解决方案参考

jar包在windows的启动方式以及jar包窗口启动假死解决方案参考

windows jar包启动的几种方式介绍

  1. java -jar xxx.jar(jar包的路径),最普通简单的方式,通过windows的命令行窗口启动,并在命令行窗口运行,输出。可以在启动的时候增加参数指定启动的端口(server.port=8080)或者指定环境等
  2. start /min java -server -Xms1024m -Xmx20480m -jar xxx.jar;重新启动一个窗口去运行jar包,不依赖当前黑窗口,该方法是重新启动一个专门的java窗口去运行jar包,可以设置jvm的参数,有很多博客介绍说这个是jar包后台运行,其实不是,只是不像第一条一样依赖当前的命令行窗口,但是会依赖另外一个新开的java运行窗口,都是窗口关闭就停止了。
  3. start /b java -server -Xms1024m -Xmx20480m -jar xxx.jar;类似第一种启动方式,也是在当前窗口输出启动信息,在当前窗口运行,依赖当前命令行窗口,只不过可以指定jvm的参数。
  4. javaw -jar XXX.jar;javaw也是启动jar包的一种命令,我只在windows上使用过,javaw.exe是相似的和java.exe 是一个win32的GUI应用,应用提供自己的GUI窗口,不启用控制台。这个命令可以使jar包后台启动,输入命令后当前窗口完成,会在后台启动一个javaw进程,如果你的程序不是界面图形化程序,就只会跑在后台。
  5. Jar 添加为windows service 服务
service.bat 

%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE(window.close)&&exit java -sever_name -jar D:\start\123.jar

# %1 mshta vbscript:CreateObject(“WScript.Shell”).Run(“%~s0 ::”,0,FALSE)(window.close)&&exit 隐藏cmd的运行窗口。
  1. jar包Linux后台不挂断启动方式,并指定输出日志文件:nohup java -jar xxx.jar > log.txt &,输入此命令后可能会有询问error日志的输出地方,可以再次输入指定输出的日志文件即可

jar包的停止

以上启动方式,1,2,3,都可以通过ctrl+c或关闭当前窗口停止,4,5,需要后台查找该程序的进程,通过杀掉进程方式停止

jar包在windows启动的假死状态

假死状态

  1. 什么是假死状态
    假死状态是我自己定义的,指的是,程序启动后稳定运行了一段时间,停滞的状态,不报错,不输出,外界访问超时,重新点击窗口,或在该窗口做一些点击或按键盘操作后程序又继续运行,类似被CPU忽略状态。
  2. 为什么会出现这种状态
    一般在一台电脑上启动单个jar包,是很少会出现这种状态的,博主是在公有云上的windows系统启动了若干个jar包,多个jar包是因为多个子功能模块,多个系统,也是方便后期的服务化和容器化。启动jar包后,第一时间都没问题,收集模块正常输出日志,数据展示正常访问,博主使用的是第一种启动方式,所以黑窗口也很多,一段时间后,发现,数据收集模块停止了输出日志,切换到,该串口点击敲击键盘,就输出很多日志,之后正常运行,一段时间后可能还会出现假死状态,数据展示模块也会出现假死状态,标志就是外界访问API超时,但内部并没日志输出,也没停止,点击后继续运行。
  3. 推测原因
    当时博主以为是程序内部问题,求助网络,有以下几种可能:
    • 有异常没有处理,导致CUP占用一直过高,检查代码,并没有没处理的,没考虑的异常,并且回顾之前的日志,并没有异常的输出;
    • httpclient连接超时,一直在等待服务端的回应,这个可能会有,数据收集部分是调用第三方的接口,重新配置httpclient的参数,配置最大连接数,超时时间等,对于博主来说然并卵;
    • 因为spring的定时任务是单线程,定时任务报错的话,会影响下一个定时任务的执行,博主用的是springboot2.1.5,查资料可知springboot维护的定时器是多线程的,其次博主定时器并没有什么异常出现导致等待,且多个定时器的时间间隔在半小时以上,所以此条不是;
    • 博主检查了一切异常,一切连接,包括httpclient,数据库连接池等,最终没有在jar包内部找出原因,并根据网上所说做了措施避免了一切会有问题的可能。
    • 最终还是会有假死状态出现,由此可见问题不在我的jar包,可能在环境,因为公有云配置不是很高,且启动的jar包有点多,导致内存占用量过大,CUP对窗口的切换过于频繁,导致假死状态
    • 读者朋友如果出现这种状态,也不妨根据以上去自我排除。

解决办法

  1. 大概找到问题所在就去寻找解决办法
    最终做了一下措施,解决了假死状态问题
    • 关闭不必要的程序,将垃圾程序占用的内存释放
    • 切换启动方式,采用javaw的启动方式,运行在后台,CUP会照顾到该程序
    • java -jar XXX.jar方式启动的时候,设置该窗口的快速编辑模式为关闭状态,启动jar包右键后点击黑窗口的最上面窗口栏 -> 属性 -> 快速编辑模式以及插入模式取消选中 -> 确认OK。
      右键后点击黑窗口的最上面窗口栏-属性
      取消快速编辑模式以及插入模式

总结原因

这个问题不是 Domino 本身的问题,是 Windows 操作系统造成的。如果 Domino 控制台在前台运行(窗口是活动窗口),当窗口进入睡眠状态时,进程会停止运行。在 Windows 操作系统上运行的其它应用也有相同问题。控制台窗口是快速编辑模式或插入模式时,当控制台切换到后台即非激活状态,窗口会进入睡眠,运行在窗口的进程会停止运行,这个情况是因为windows的原因,不仅仅在jar包启动方面。下次可以先检查一下是否开启了快速编辑模式。

猜你喜欢

转载自blog.csdn.net/qq_38371367/article/details/97111492