Java 程序启动慢的一些原因

Java 程序启动慢的一些原因

一、熵/随机数相关

dd count=50 ibs=1024 if=/dev/random > /dev/null
记录了0+50 的读入
记录了7+1 的写出
3712字节(3.7 kB)已复制,2.57967 秒,1.4 kB/秒
dd count=50 ibs=1024 if=/dev/urandom > /dev/null
#
记录了50+0 的读入
记录了100+0 的写出
51200字节(51 kB)已复制,0.00034067 秒,150 MB/秒

1. 在 Tomcat 环境中解决

catalina.sh 中加入:

-Djava.security.egd=file:/dev/./urandom

2. JVM 环境解决

修改此文件 $JAVA_PATH/jre/lib/security/java.security

# securerandom.source=file:/dev/urandom
# 替换为以下值:
securerandom.source=file:/dev/./urandom

3. jar 启动命令行

添加以下启动参数:

-Djava.security.egd=file:/dev/./urandom

二、网络原因

未设置 hosts 地址可能造成相关问题:

127.0.0.1 localhost <hostname>.local

三、其他

1. 使用性能分析工具

Arthas:Slow Start | Troubleshooting

2. JDK 问题

2.1 执行模式

java 有三种执行模式:

  • interpreted mode:解释执行模式
  • compiled mode:编译执行模式
  • mixed mode:混合模式,会使用 JIT

只建议使用 mixed mode。

2.2 java 运行方式

有 client 方式和 server 方式。64 位只有 server 模式,32 位有两种模式。

只建议使用 server 模式。

2.3 硬件问题

  • 内存
  • 磁盘
加载评论