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 。

参考: Heroku和Java –从新手到初学者,我们的JCG合作伙伴 Piotr Buda的第二部分,来自Software Ramblings博客。

翻译自: https://www.javacodegeeks.com/2013/05/heroku-and-java-from-newbie-to-beginner-part-2.html

java heroku

java heroku_Heroku和Java –从新手到初学者,第2部分相关推荐

  1. java heroku_Heroku和Java –从新手到初学者,第1部分

    java heroku 最近,我听说Heroku允许在Cedar堆栈中部署Java应用程序. 由于没有真正的软件构想,我决定尝试一下,仅配置SOMETHING以在Heroku上运行. 我对ReST有所 ...

  2. java heroku_Heroku运行Java

    java heroku 如果您是像我这样的Java迷,那么您有个好消息值得振奋. Heroku现在运行Java! 嗯,与其他流行的" Web"语言(如PHP / RoR)不同,Ja ...

  3. Heroku和Java –从新手到初学者,第2部分

    问题 所以过了几天,我可以回到我的Recaps小项目. 我从检查日志开始,发现了以下内容: 2012-03-04T01:52:51+00:00 heroku[web.1]: Idling 2012-0 ...

  4. Heroku和Java –从新手到初学者,第1部分

    最近,我听说Heroku允许在Cedar堆栈中部署Java应用程序. 由于没有真正的软件构想,我决定尝试一下,仅将SOMETHING配置为可在Heroku上运行. 我对ReST有一些迷恋(我仍然想学习 ...

  5. java 简单获取Excel表格内容(初学者)

    java 简单获取Excel表格内容(初学者) 代码: package cn.ccaih.read;import org.apache.poi.ss.usermodel.Cell; import or ...

  6. 第一个java程序的错误_我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么?...

    我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么? welcome.java: import javax.swing.*; public class w ...

  7. 今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~

    今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~ [源码+教程]Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发实战教学_Java小游戏_体验 ...

  8. 好程序员Java培训分享Java初学者必读

    好程序员Java培训分享Java初学者必读,近年来各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java.因此,也是吸引了 ...

  9. 怎么学习Java编程,Java初学者指南

    怎么学习Java编程,Java初学者指南.Java基于C和C++.第一个Java编译器是由Sun Microsystems开发的,是使用C++中的一些库用C编写的.Java文件使用编译器转换为位代码格 ...

最新文章

  1. ACM 未解决的问题
  2. linux i3如何运行qq,linux qq (CPU :i3)怎么安装?
  3. 关于UNION ALL与 UNION 用法和区别
  4. [Windows沙拉]调整Windows7下时间同步的频率
  5. Jquery操作select小结
  6. 花痴流口水颜文字_流口水可执行模型
  7. WIN7开启WIFI
  8. zookeeper3.5.x版本启动报错java.io.IOException: No snapshot found, but there are log entries.解决
  9. ARM汇编开关终端cpsie/cpsid
  10. php随机访问文章,zblog PHP调用热门文章、随机文章和热评文章代码
  11. IPv4中IP地址分类
  12. python docx table 边框_使用pythondocx指定表中的边框外观
  13. 电脑前面耳机插孔没声音,后面有声音
  14. thinkphp 后台管理框架swiftadmin的使用
  15. VMware虚拟机启动错误(正在被占用、内部错误)等问题
  16. idea配置有道词典
  17. Java注解中produces啥意思_SpringBoot常用注解
  18. oracle peoplesoft enterprise,Solix实现与Oracle PeopleSoft Enterprise9.1整合
  19. 如何读一个在职在线的海外名校的计算机硕士
  20. A 'Brief' History of Neural Nets and Deep Learning, Part 4

热门文章

  1. codeforces gym-101736 Dessert First Strategy 最小割
  2. JavaFX鼠标移动事件
  3. 训练集样本不平衡问题对CNN的影响
  4. JavaScript学习总结(四)——逻辑OR运算符详解
  5. Java集合从菜鸟到大神演变
  6. 常用的字符串加密解密工具类
  7. struts基本概念(1)
  8. 判断一个男人穷还是富,只看这几点!
  9. 2018蓝桥杯省赛---java---B---6(递增三元组)
  10. JAVA基础学习大全(笔记)