标签为 Jboss 的文章

JBoss无规律自动关闭故障定位

最近遇到了几次JBoss无规律自动关闭的奇怪现象,通过history历史命令和last登录信息,都看不到有人操作过的迹象。

后来查了一些资料,JBoss官方论坛给出的几条解释是:
1.JBoss自己没有设置可以自动shutdown的机制;
2.JBoss可以通过web console进行关闭,但我们已经去掉了相关的软件包;
3.JBoss可能接受Ctrl+C或非后台运行的session中断信号而执行shutdown。

后来我查到我们的情况和第3点很类似:

通过日志可以看到JBoss是在06:02:04接到一个关闭请求的。
2011-10-27 06:02:04,086 INFO [org.jboss.bootstrap.microcontainer.ServerImpl] (JBoss Shutdown Hook) Runtime shutdown hook called, forceHalt: true
2011-10-27 06:02:05,089 INFO [org.apache.coyote.http11.Http11Protocol] (JBoss Shutdown Hook) Pausing Coyote HTTP/1.1 on http-0.0.0.0-80
2011-10-27 06:02:05,090 INFO [org.apache.coyote.http11.Http11Protocol] (JBoss Shutdown Hook) Stopping Coyote HTTP/1.1 on http-0.0.0.0-80

而jack是在这个时候退出终端的:
jack pts/0 125.69.77.99 Thu Oct 27 05:20 - 06:02 (00:41)

查看history历史记录,之前最后一次启动JBoss是在05:49:20通过执行restart_jboss.sh脚本完成的:
2011-10-27_05:49:20 ./restart_jboss.sh

接着通过find命令在jack的home目录下找到了该restart_jboss.sh脚本。

继续查看了脚本内容,发现在一系列操作之后,最后执行了service jboss start 和 tail -f ./log/server.log 的动作,我怀疑是jack的非正常退出导致了JBoss的关闭,于是在虚拟机上做了测试。
结果证明确实如此,如果在执行了脚本之后直接关闭了客户端窗口,而不是通过exit正常退出的话,JBoss会自动执行shutdown,情况非常容易重现。

但是按道理说,我们是使用的JBoss官方自带的脚本,应该是与apache等其它软件自带的脚本一样让进程以后台服务的方式运行的,不应该接收非后台运行的session中断信号。但经过反复测试后,证明其并非我们想象中那样值得信赖。

因此,我们今后还是最好加上nohup来确保JBoss不会接收session的中断信号:nohup service jboss start。

No Comments

在Jboss中添加Godaddy的SSL域名证书的方法

公司购买的Godaddy的SSL域名证书快要到期了,最初用于Jboss下的SSL域名证书是Godaddy直接给我们的,命名为tomcat.jks,只需要在server.xml中指定keystoreFile(证书存放的路径) 与 keystorePass(证书上的密钥)的值就可以使用了。
但这一次通过Godaddy的域名管理后台下载好了 域名的证书(your-domain-name.crt) 和 域名的证书私钥(your-key-name.key) 之后,按照Godaddy的官方文档所创建出的新证书始终不能成功应用,具体表现为Jboss在启动的时候根本无法监听443端口,而且80端口也会被影响,无法正常访问。

后来,通过不断的尝试,终于把问题给解决了,主要有两种方法:

方法一:
按照Godaddy的官方文档中第一个选项来生成tomcat.jks(这个文件的名称可以修改),并在Jboss的server.xml中指定其key的类型为keystoreType="PKCS12";

# openssl pkcs12 -export -chain -CAfile gd_bundle.crt -in your-domain-name.crt -inkey your-key-name.key -out tomcat.jks -name tomcat
若域名证书的私钥文件上带有密码的话,会提示要求输入密码;
接着还会要求输入两次新创建的tomcat.jks证书的密钥。

其中,gd_bundle.crt需要从Godaddy的Repository下载,your-domain-name.crt 和 your-key-name.key 都需要从Godaddy的域名管理后台下载,tomcat.jks可以修改为你想要生成的证书的名字,最后的tomcat是证书的别名,同样可以修改。

修改server.xml中的配置如下:

      <Connector protocol="HTTP/1.1" SSLEnabled="true" 
           port="443" address="${jboss.bind.address}"
           scheme="https" secure="true" clientAuth="false" 
           keystoreFile="${jboss.server.home.dir}/conf/tomcat.jks"
           keystorePass="your-key-password" keystoreType="PKCS12" sslProtocol = "TLS" />

其中,keystoreFile的值需指定为实际的key所存放的位置,建议存放到jboss的conf目录;keystorePass的值为上面创建tomcat.jks时设置的密钥的值。

最后,用新的tomcat.jks替换掉旧的,然后重启一下Jboss,通过https访问便可以看到新的域名证书了。

方法二:
因为公司有很多的服务器都需要用到这个新的tomcat.jks证书文件,而方法一还需要修改Jboss的server.xml配置文件,感觉比较麻烦。
并且因为之前的证书文件在未经修改server.xml时都可以成功应用,新的应该也有办法,最后我找到了一篇文章,实现了不修改server.xml就可以成功应用新证书。

# openssl pkcs12 -export -chain -CAfile gd_bundle.crt -in your-domain-name.crt -inkey your-key-name.key -out tomcat.jks.pkcs12 -name tomcat
该步骤与方法一相同,仅仅是将tomcat.jks名称改为了tomcat.jks.pkcs12,以便下面的步骤生成新的tomcat.jks。

# keytool -importkeystore -deststorepass 'your-key-password' -destkeypass 'your-key-password' -destkeystore tomcat.jks -srckeystore tomcat.jks.pkcs12 -srcstoretype PKCS12 -srcstorepass 'your-key-password' -alias tomcat

未经修改的server.xml中的配置如下:

      <Connector protocol="HTTP/1.1" SSLEnabled="true" 
           port="443" address="${jboss.bind.address}"
           scheme="https" secure="true" clientAuth="false" 
           keystoreFile="${jboss.server.home.dir}/conf/tomcat.jks"
           keystorePass="your-key-password" sslProtocol = "TLS" />

最后,同样是用新的tomcat.jks替换掉旧的,然后重启一下Jboss,通过https访问便可以看到新的域名证书了。

, , ,

No Comments

JDK、Tomcat、Jboss以及Weblogic在Linux上的安装与配置[原创总结]

项目中绝大多数B/S架构的系统都采用了J2EE架构,因此JDK、Tomcat、Jboss以及Weblogic的安装与配置也就成了重复性最多的工作之一。
在此,我进行了总结,并分享出来,希望能对大家有所帮助。

其中,JDK是针对Java的软件开发与运行环境,而Tomcat、Jboss以及Weblogic则都是基于J2EE的应用服务器。
而这些应用服务器都需要JDK的支持,相当于运行在JDK之上,所以这些应用服务器没有32位和64位之分,而JDK倒是针对不同的操作系统有很多不同的版本。

具体步骤如下:
阅读全文 »

, , ,

3 Comments