标签归档:Java

解决异常Certificates does not conform to algorithm constraints

这两天线上一批测试服的环境从JDK7升级到JDK8,上线之后突然不能充值了,后台日志报错如下:

java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints

这个异常字面的意思就是:在进行SSL握手时,所采用的证书算法不符合约束条件,抛了异常。结合堆栈信息,很快定位到代码层面:是我们游戏充值时要向腾讯的服务器发送一个https请求以获取token,然而因为腾讯服务器所采用的ssl证书算法不符合某种约束条件而抛异常了,从而导致充值异常!那到底什么约束条件呢?网上搜索了一下基本都是让你改这个文件:
$JAVA_HOME/jre/lib/security/java.security
把其中的配置项:
#jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, \ DSA keySize < 1024, EC keySize < 224
改成:
jd[......]

继续阅读

java进程coredump(二)

上篇介绍了如何生成一个Java进程的coredump,今天则来总结下当Java进程挂掉之后应该怎么样一步一步来分析。

一、Fatal Error Log
接着昨天的例子继续看,在coredump之后目录里面的文件是这样的:

一般情况下当Java进程挂掉之后,在程序目录下面会生成一个错误日志:hs_err_pidxxxx.log。这个文件是你排查问题的过程中第一个应该阅读的日志,因为这个文件里面会记录很多有用的信息,比如:线程堆栈,堆的使用情况,JVM参数和环境变量,虚拟机状态,操作系统信息等。这里提供的信息非常多,也非常全面,为我们大致定位问题提供了很大的帮助。
先来看下文件开头的注释信息,这里的信息很粗略地指出了崩溃的原因:

第8,9行指出了出现问题的栈是在动态库crash.so的Java_CoreDumpTest_crash方法。接下来看下具体的堆栈信息:

继续阅读

struts2和servlet

今天上海下雨了,阴冷的天让人不想出门,窝在被窝里看到了一本书:《struts2-in-action》。第一感觉是struts2这个词已经被听烂了,大学里面各种web课程项目里几乎都有它的身影,SSH嘛,第一个S就是struts。但仔细一想struts究竟是什么呢?我竟然无法准确回答出来。带着疑问阅读了这本书的第一节:Struts 2: the modern web application framework
在读之前看到作者在书的留白处还写了这样一句话:
To world peace
and a global redistribution of prosperity(为了世界和平,为了全球繁荣的重新分配)
不得不感叹国外的程序员就是逼格高啊。
文章首先介绍了最基本的HTTP通信流程,客户端发送请求到服务器端,服务器返回数据。服务器端接受到的就是HTTP请求,包括一些基本HTTP REQUEST信息还有请求参数等。所以你拿到这一堆数据之后就需要把它们转换为java可用的对象,处理完逻辑之后再把java对象转换为文本返回给客户端。每个请求都这么做实在是太繁琐了,于是java提出了[……]

继续阅读

浅谈可重入性及其他

这篇文章主要讨论三个问题:1.什么是可重入性 2.什么是可重入锁 3.什么是ReentrantLock
首先为什么会讨论可重入性呢?大家知道java中有一个非常常用的类库叫ReentrantLock,中文翻译成可重入锁,每次看到这个翻译我的第一反应就是什么是可重入锁?为什么要这么命名呢?那么什么是ReentrantLock呢?Oracle的官方文档给出的解释是这样的:

A reentrant mutual exclusion Lock with the same basic behavior and semantics as the implicit monitor lock accessed using synchronized methods and statements, but with extended capabilities.

意思就是ReentrantLock和synchronized关键字所起的基本作用是一样的,但是提供了更多的扩展功能。看了这个解释并没有解答我的困惑,官方文档并没有解释什么是可重入锁,只是说了ReentrantLock提供了更多的功能。那么什么[……]

继续阅读