1.问题现象
- Tomcat启动时间长,平均时间在500s左右.
- 服务响应慢,页面持续等待,直至超时
2.日志分析
- tomcat日志发现,生成sessionId时间长,继续跟踪sessionId的生成原理,发现使用了系统的随机数方法,google secureRandom初步怀疑为安全随机数问题.
3.SecureRandom
使用Tomcat作为web容器,Tomcat会使用SecureRandom生成SessionId,此为通用标准配置,Linux系统上SecureRandom默认会从/dev/random获取随机数。/dev/random中的随机数来源于按键、磁盘读写、网络读写等,对于后台长时间运行的系统而言,系统运行趋于稳定、可预测、随机性缺失,这就导致系统熵源不足。当熵源不足时,从/dev/random设备获取随机数会阻塞,直到有足够的熵源。
4.问题解决
1.查看系统熵值
watch -n 1 cat /proc/sys/kernel/random/entropy_avail
一般来讲,系统熵值在3000左右,如果熵值较低,就说明有问题,可以安装Linux下的标准服务保证熵值保持在较高的水平
2.临时解决方法
配置Tomcat使用不安全的随机数,修改tomcat配置文件中的 /dev/random为 /dev/urandom,修改后重启
3.安装系统工具
操作系统自带的rng工具,例如haveged或者rngd都可以,这里提供一个配置方法
yum install haveged
chkconfig haveged on