Java项目上线遇到两个问题
====================================================
问题一:在jvm中一次性启动52个进程,每次只能启动20多个然后就报错了,生成了一个hs_err_pidxxx.log 错误日志文件。
--下面是启动的输出日志
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# An error report file with more information is saved as:
# /hs_err_pid64902.log
com.xx.xx.lsnr.Listener trade_xx_bat_74
自己查看主机的内存free还很充足,不知道为什么java进程启动报错内存不够。我一直以为是jvm有设置使用系统内存的最大容量。 启动脚本设置了进程最大使用的堆内存为256MB 54个进程启动最大使用内存应该13G 足够了,实际上主机空闲内存远远超出13G。一直在查找设置JVM使用系统内存怎么设置? 这是一个错误的方向!!!
最后请教了一下平台组的同事,最后搞定了。
原因是:
内核参数的问题
需要调整下系统最大打开文件数、进程数
继续查询了一下ulimit 这个命令 茅塞顿开……
--进程启动脚本 循环执行52次
JAVA -Xms128M -Xmx256M -classpath com.xx.xx.lsnr.Listener trade_xx_bat_74
设置了
-Xms128m JVM初始分配的堆内存
-Xmx256M JVM最大允许分配的堆内存,按需分配
====================================================
问题二:52个进程是启动起来了。但是有一种卡主的感觉,因为进程启动完毕会读取数据库配置生成一个log文件。来实时输出项目的运行日志。继续观察会发现偶尔也会生成一个日志文件,生成的时间不定。
52个进程正常,但是日志文件都没有生成很奇怪,过一阵子生成一个,过一阵子生成一个很奇怪。从来没遇到过。通过ps -ef|grep 查看进程是这些java进程确实是存在但是进程里面的java代码却不运行。
后来通过增加输出语句定位到在生成 Properties 对象时就卡住了。
// log4j配置参数信息,没有指定则不特殊处理
Properties log4j = new Properties();
Properties lsnrConfig = new Properties();
再往下就是加装Spring配置文件。连接数据库读取配置放入到Properties 对象。
最后解决方案:增加-Djava.security.egd 参数为 file:/dev/./urandom 搞定
JAVA -Xms128M -Xmx256M
-Djava.security.egd=file:/dev/./urandom -classpath com.xx.xx.lsnr.Listener trade_xx_bat_74
file:/dev/./urandom 等效于 file:/dev/urandom只是为了躲避java的检查因为java代码里面写死了 如果设置值是file:/dev/urandom 则去读file:/dev/random
random是阻塞的,而urandom 是非阻塞的。对于安全性不高的应用用urandom 足以。
参考资料:
http://zhidao.baidu.com/link?url=1gWoG-a6SYacVYAwiDY5JW863_gmSQQvoRh_vGNHxOruMxUVtJKEt4ueMM_IicRyjOmumEvI566nPfX0AOnEPRckhFFx8cCnG9Xo9WJ5p4a
http://blog.csdn.net/raintungli/article/details/42876073
理解不是很深刻,仅供参考
分享到:
相关推荐
这两个方法分别执行加密和解密操作,其中`getEncString()`使用Base64编码加密后的数据,而`getDesString()`则先Base64解码,然后再解密。 5. **安全性考虑**:虽然示例代码提供了基本的加密功能,但它没有涵盖所有...
首先,RSA是一种非对称加密算法,基于两个密钥:公钥和私钥。公钥用于加密数据,而私钥用于解密。这种方式保证了即使数据在传输过程中被截取,没有私钥的攻击者也无法解密信息,从而确保了数据的安全性。 `...
sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); ``` 3. 创建一个SSLSocketFactory,使用我们的SSLContext: ```java SSLSocketFactory sslSocketFactory = sslContext....
为了解决这个问题,我们需要自定义一个`TrustManager`,允许所有证书,或者导入特定的证书到Java的信任存储。以下代码展示了如何创建一个信任所有证书的`TrustManager`: ```java TrustManager[] trustAllCerts =...
Java提供了多种方法来生成随机字符串,主要包括使用`java.util.Random`类和`java.security.SecureRandom`类。其中,`SecureRandom`类提供了一种更加安全的方式来生成随机数,它适合于安全性要求较高的应用场合。 ##...
标注使用java.security.SecureRandom在策略Apigee Edge代理内生成随机数(int,UUID或高斯值),并使用该信息设置上下文变量。免责声明此示例不是正式的Google产品,也不是正式的Google产品的一部分。使用此标注您...
在上面的代码中,我们实现了doPost方法,该方法将参数转换为字节数组,并调用另一个doPost方法来实现Post请求。 下面是doPost方法的实现代码: ```java private static String doPost(String url, String ctype,...
在Java编程语言中,生成随机数和排序是两个常见的任务,它们在许多应用场景中都扮演着重要角色。这里我们将深入探讨这两个主题,并提供一些解决实际问题的方法。 首先,让我们来看看如何在Java中生成随机数。Java...
Java 随机生成 50 个数字并统计出现次数 在这个 Java 编程示例中,我们将学习如何使用 Java 语言生成 50 个随机数字,并统计每个数字出现的次数。我们将创建一个名为 RandomTest 的 Java 类,使用Java.util.Random...
本文将深入探讨Java和Delphi中实现DES加解密的源代码,以及如何实现这两个不同平台之间的互操作性。 DES算法是在1970年代由IBM开发,后来被美国国家标准局(NIST)采纳为标准。它基于64位的数据块进行操作,使用56...
本项目“基于Java的两个通用安全模块的设计与实现”旨在提供一套解决方案,以增强软件的安全性,防止潜在的攻击和数据泄露。以下是这两个安全模块的核心内容和实现细节。 模块一:密码哈希与验证模块 在任何涉及...
Java 根据比例概率生成随机数 概率随机数是指根据事先设定的概率分布生成随机数的方法。在 Java 中,可以使用 Math.random() 方法生成随机数,然后根据概率分布判断返回的数字。 在给定的代码中,作者定义了一个 ...
Java中实现公钥和私钥加密解密主要依赖于Java Cryptography Extension (JCE) 提供的API,特别是`java.security`和`javax.crypto`这两个包。以下是关键类和接口: 1. KeyPairGenerator:用于生成公钥和私钥对。 2. ...
本文将深入探讨CSDN博客安全认证头中的两个关键元素:`x-ca-nonce` 和 `x-ca-signature`,并展示如何使用Java代码来生成这两个值。 `x-ca-nonce` 是一个非重复性的随机字符串,用于增加每次请求的独特性,防止重放...
通常,正确做法是获取并安装服务器的合法证书,或者配置Java信任商店以信任该特定证书。 总结起来,Java通过`SSLContext`和`TrustManager`提供了灵活的SSL/TLS策略,允许开发者在必要时调整证书校验。同时,`...
在这个Java课程设计中,我们将深入探讨如何使用Java实现文件的加密和解密过程。 首先,我们需要理解加密的基本概念。加密是一种将明文数据转换为难以理解的形式(密文)的过程,目的是防止未经授权的访问者获取信息...
在Java编程中,发送HTTP和HTTPS请求是常见的网络通信任务,尤其在开发Web服务客户端或者进行API测试时。本文将详细讲解如何使用Java发送GET和...在实际开发中,要根据项目需求选择合适的方法,并确保处理好安全性问题。
java.security.NoSuchAlgorithmException: SHA1PRNG SecureRandom not available at sun.security.jca.GetInstance.getInstance(GetInstance.java:142) at java.security.SecureRandom.getInstance(SecureRandom....