java heroku_Heroku和Java –从新手到初学者,第2部分
java heroku
问题
所以过了几天,我可以回到我的Recaps小项目。 我从检查日志开始,发现了以下内容:
2012-03-04T01:52:51+00:00 heroku[web.1]: Idling
2012-03-04T01:52:53+00:00 heroku[web.1]: Stopping process with SIGTERM
2012-03-04T01:53:03+00:00 heroku[web.1]: Error R12 (Exit timeout) -> Process failed to exit within 10 seconds of SIGTERM
2012-03-04T01:53:03+00:00 heroku[web.1]: Stopping process with SIGKILL
我不知道您的想法,但是每当我在日志中看到“错误”时,我都会感到担忧。 因此,我决定删除该讨厌的行。 发生的事情令人不愉快。
解决方案
这似乎是一个简单的问题。 我首先找到了SIGTERM的全部含义。 我知道这是Linux信号,我只是想知道Heroku实际在做什么。 因此,基本上,有时候Heroku只是将SIGTERM发送到您的进程,以便允许它正常关闭。 这很简单。
正如我在上一篇文章中提到的那样,我决定使用Jetty代替Grizzly。 最初,我决定使用jetty-runner运行我的Web应用程序,它运行良好,在Jersey Servlet启动时对资源进行了扫描。 部署到Heroku也很容易,并且通过修改Procfile可以启动应用程序。
但是,该应用程序对SIGTERM的React不正确,因此在不深入研究jetty-runner配置的情况下,我决定只使用嵌入式Jetty服务器。 这非常简单,运行领班启动可以使应用程序真正启动。 因此,无需进一步考虑,我便将更改后的应用程序部署到了Heroku。 为了检查错误是否再次出现,在第一次启动后,我只是重启了heroku并连接到另一个终端上的日志。 但是退出超时错误消息仍然存在。 我在这里的错误–我没有测试应用程序在使用工头时是否会正确退出。 再次,领班开始,然后再按ctrl + c看看会发生什么(后来我尝试使用kill -s TERM procand得到类似的输出):
pbu@pbudesk ~/recaps $ foreman start
21:57:27 web.1 | started with pid 9603
21:57:27 web.1 | 0 [main] INFO org.eclipse.jetty.server.Server - jetty-8.1.1.v20120215
21:57:27 web.1 | 110 [main] INFO org.eclipse.jetty.webapp.StandardDescriptorProcessor - NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
21:57:27 web.1 | 132 [main] INFO org.eclipse.jetty.server.handler.ContextHandler - started o.e.j.w.WebAppContext{/,file:/home/pbu/Devel/IdeaProjects/recaps/webmodule/src/main/webapp/},webmodule/src/main/webapp
21:57:27 web.1 | 133 [main] INFO org.eclipse.jetty.server.handler.ContextHandler - started o.e.j.w.WebAppContext{/,file:/home/pbu/Devel/IdeaProjects/recaps/webmodule/src/main/webapp/},webmodule/src/main/webapp
21:57:27 web.1 | 183 [main] INFO org.eclipse.jetty.server.AbstractConnector - Started SelectChannelConnector@0.0.0.0:5000
^CSIGINT received
21:57:57 system | sending SIGTERM to all processes
21:57:57 system | sending SIGTERM to pid 9603
21:57:57 web.1 | process terminated
pbu@pbudesk ~/recaps $
好的,所以当领班收到SIGINT时,它将SIGTERM发送到所有进程,很酷–也许Heroku测功机的行为相同。 不过,这并不是正常关机,但是Jetty的正常关机部分提到了两个不错的属性:gracefulShutdown和stopAtShutdown。 修改后的类如下所示:
public class Serve {public static void main(String[] args) throws Exception {int port = Integer.valueOf(System.getenv("PORT"));Server jetty = new Server(port);WebAppContext context = new WebAppContext();context.setContextPath("/");String webapp = "webmodule/src/main/webapp";context.setWar(webapp);context.setResourceBase(webapp);jetty.setHandler(context);jetty.setGracefulShutdown(1000);jetty.setStopAtShutdown(true);jetty.start();jetty.join();}
}
再次运行领班并使用ctrl + c证明此方法有效! 大!
pbu@pbudesk ~/recaps $ foreman start
22:11:47 web.1 | started with pid 9863
22:11:47 web.1 | 0 [main] INFO org.eclipse.jetty.server.Server - jetty-8.1.1.v20120215
22:11:47 web.1 | 110 [main] INFO org.eclipse.jetty.webapp.StandardDescriptorProcessor - NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
22:11:47 web.1 | 131 [main] INFO org.eclipse.jetty.server.handler.ContextHandler - started o.e.j.w.WebAppContext{/,file:/home/pbu/Devel/IdeaProjects/recaps/webmodule/src/main/webapp/},webmodule/src/main/webapp
22:11:47 web.1 | 132 [main] INFO org.eclipse.jetty.server.handler.ContextHandler - started o.e.j.w.WebAppContext{/,file:/home/pbu/Devel/IdeaProjects/recaps/webmodule/src/main/webapp/},webmodule/src/main/webapp
22:11:48 web.1 | 183 [main] INFO org.eclipse.jetty.server.AbstractConnector - Started SelectChannelConnector@0.0.0.0:5000
^C22:11:49 web.1 | 1969 [Thread-1] INFO org.eclipse.jetty.server.Server - Graceful shutdown SelectChannelConnector@0.0.0.0:5000
22:11:49 web.1 | 1970 [Thread-1] INFO org.eclipse.jetty.server.Server - Graceful shutdown o.e.j.w.WebAppContext{/,file:/home/pbu/Devel/IdeaProjects/recaps/webmodule/src/main/webapp/},webmodule/src/main/webapp
SIGINT received
22:11:49 system | sending SIGTERM to all processes
22:11:49 system | sending SIGTERM to pid 9863
22:11:50 web.1 | 2982 [Thread-1] INFO org.eclipse.jetty.server.handler.ContextHandler - stopped o.e.j.w.WebAppContext{/,file:/home/pbu/Devel/IdeaProjects/recaps/webmodule/src/main/webapp/},webmodule/src/main/webapp
22:11:50 web.1 | process terminated
pbu@pbudesk ~/recaps $
So off to deploy it to the cloud! Again, deploy, heroku restart and watch logs... but it doesn't work.
不同的方式
最初失败后,我尝试了另一种方法。 我发现您可以注册关闭钩子-非常简单。 为此,只需使用Runtime.getRuntime()。addShutdownHook(Thread)方法注册一个新线程:
public class Serve {public static void main(String[] args) throws Exception {Runtime.getRuntime().addShutdownHook(new Thread() {@Overridepublic void run() {System.out.println("Shutting down by shutdown hook");}});int port = Integer.valueOf(System.getenv("PORT"));Server jetty = new Server(port);WebAppContext context = new WebAppContext();context.setContextPath("/");String webapp = "webmodule/src/main/webapp";context.setWar(webapp);context.setResourceBase(webapp);jetty.setHandler(context);jetty.setGracefulShutdown(1000);jetty.setStopAtShutdown(true);jetty.start();jetty.join();}
}
用工头进行的最终测试证明它也可以工作,但是再次在Heroku上不起作用。
在这一点上,我不知道如何摆脱超时。 这不是很重要,我只想检查我是否可以对此做出React,但无济于事。 现在,我想我只想联系Heroku,也许他们会帮助您。 另一种选择是尝试嵌入式Tomcat,但可能稍后再尝试。 现在,我还有其他事情要做,例如查看Jelastic 。
翻译自: https://www.javacodegeeks.com/2013/05/heroku-and-java-from-newbie-to-beginner-part-2.html
java heroku
java heroku_Heroku和Java –从新手到初学者,第2部分相关推荐
- java heroku_Heroku和Java –从新手到初学者,第1部分
java heroku 最近,我听说Heroku允许在Cedar堆栈中部署Java应用程序. 由于没有真正的软件构想,我决定尝试一下,仅配置SOMETHING以在Heroku上运行. 我对ReST有所 ...
- java heroku_Heroku运行Java
java heroku 如果您是像我这样的Java迷,那么您有个好消息值得振奋. Heroku现在运行Java! 嗯,与其他流行的" Web"语言(如PHP / RoR)不同,Ja ...
- Heroku和Java –从新手到初学者,第2部分
问题 所以过了几天,我可以回到我的Recaps小项目. 我从检查日志开始,发现了以下内容: 2012-03-04T01:52:51+00:00 heroku[web.1]: Idling 2012-0 ...
- Heroku和Java –从新手到初学者,第1部分
最近,我听说Heroku允许在Cedar堆栈中部署Java应用程序. 由于没有真正的软件构想,我决定尝试一下,仅将SOMETHING配置为可在Heroku上运行. 我对ReST有一些迷恋(我仍然想学习 ...
- java 简单获取Excel表格内容(初学者)
java 简单获取Excel表格内容(初学者) 代码: package cn.ccaih.read;import org.apache.poi.ss.usermodel.Cell; import or ...
- 第一个java程序的错误_我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么?...
我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么? welcome.java: import javax.swing.*; public class w ...
- 今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~
今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~ [源码+教程]Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发实战教学_Java小游戏_体验 ...
- 好程序员Java培训分享Java初学者必读
好程序员Java培训分享Java初学者必读,近年来各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java.因此,也是吸引了 ...
- 怎么学习Java编程,Java初学者指南
怎么学习Java编程,Java初学者指南.Java基于C和C++.第一个Java编译器是由Sun Microsystems开发的,是使用C++中的一些库用C编写的.Java文件使用编译器转换为位代码格 ...
最新文章
- ACM 未解决的问题
- linux i3如何运行qq,linux qq (CPU :i3)怎么安装?
- 关于UNION ALL与 UNION 用法和区别
- [Windows沙拉]调整Windows7下时间同步的频率
- Jquery操作select小结
- 花痴流口水颜文字_流口水可执行模型
- WIN7开启WIFI
- zookeeper3.5.x版本启动报错java.io.IOException: No snapshot found, but there are log entries.解决
- ARM汇编开关终端cpsie/cpsid
- php随机访问文章,zblog PHP调用热门文章、随机文章和热评文章代码
- IPv4中IP地址分类
- python docx table 边框_使用pythondocx指定表中的边框外观
- 电脑前面耳机插孔没声音,后面有声音
- thinkphp 后台管理框架swiftadmin的使用
- VMware虚拟机启动错误(正在被占用、内部错误)等问题
- idea配置有道词典
- Java注解中produces啥意思_SpringBoot常用注解
- oracle peoplesoft enterprise,Solix实现与Oracle PeopleSoft Enterprise9.1整合
- 如何读一个在职在线的海外名校的计算机硕士
- A 'Brief' History of Neural Nets and Deep Learning, Part 4