winserver Jenkins启动tomcat进程被杀死

症状

Jenkins在构建完成之后,会杀死相关的子进程,也就是说maven自动构建完,开启tomcat后断开连接的时候,会连带着把子进程也就是tomcat的进程杀死。

解决方法

在Linux上sh加参数DONTKILLME即可,win上无效。所以我们得借助一个过渡的方法去开启tomcat,保证tomcat的进程不属于Jenkins构建操作的子进程。我这里给出的方案是采用Windows下的任务计划来过渡。
在这里插入图片描述
执行顺序是串行的,所以放入两个bat会顺序执行,你也可以存在一个bat里。第一个bat是重启前的相关操作(替换类,替换配置文件等操作),第二个bat就是tomcat自带的开启bat。

坑点

① shutdown.bat关不掉tomcat导致重启失败

这是winserver 下的特色,shutdown.bat假死,那边startup.bat已经开始执行,导致重启失败。

restart.bat里加入如下命令,利用直接杀死端口的方式杀死tomcat,当然,在并发系统中,这个操作肯定会导致正在执行的线程被杀死,可以借助ng的重试来解决这个问题。

for /F "tokens=5" %%i in ( 'netstat -ano ^| findstr :8080' ) do taskkill /f /pid  %%i  /t

附dos下的杀端口命令

for /F "tokens=5" %i in ('netstat -ano ^| findstr :8080') do taskkill /F /PID %i /T 

② 通过任务计划开启的tomcat性能低下

自从引入Jenkins后,经常感觉整个系统非常卡顿,而偶尔手动的重启性能不错,当时并没有往这方面想过原因,后来层层剖析发现原来任务计划执行的优先级是低于标准,自然程序性能较差。
详情参考这篇文章
winserver任务计划启动tomcat性能低下

③ winserver jstat not found 和 arthas 找不到进程

任务计划启动的java只能通过任务计划启动的java解析工具去获取进程。
详情参考这篇文章
winserver jstat not found 和 arthas 找不到进程

最后

在winserver下,我已经解决了非常多的坑点,感触很深。由于各种原因选型winserver和linux服务器其实各占半壁江山。当然很多公司仅是因为想降低运维难度,而选用winserver,理由很简单啊,windows我天天用,点点鼠标就行了,linux命令行多麻烦,而不知道其实要运维好winserver难度是比linux大得多的,很多在linux下几句命令就可以解决的事到了winserver下就是一个搜索引擎找不到的难点,最后能解决还是不错的,难搞的是有些功能开源工具,系统底层就不支持。
例如,jnotify(一个提供监听文件夹功能的jar包),就无法监听windows的文件夹中文件下载完成,只能监听到文件生成,从而带来不少麻烦,至今未解决。
Nginx处理io事件方式,无法使用epoll,而是select,使得Nginx在winserver上注定不是个超高性能的并发服务器,当然支撑个万级并发不是问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值