Tomcat 不正常挂掉原因(不定期更新)
-
ueba.log 日志出现大量 init session ok: xxxxxxxxxxxxxxxx,几乎 1 秒钟好多条,这个会造成 tomcat 资源被大量占用,然后出现大量连接被重置异常,直到 tomcat 变成假死状态,重启后可恢复。
这个 BUG 在 UEBA6.0 中是一直存在的,解决办法:
1) 升级到 7.0
2) 直接在 6.0 的客户端中修改,通过服务端升级功能升级客户端 -
日志中出现 OutOfMemoryError 异常
这个是 tomcat 分配的运行内存不足,解决办法是修改 tomcat/bin/catalina.sh 文件:JAVA_OPTS="-Xms256m -Xmx1024m -server -XX:PermSize=128m -XX:MaxPermSize=512m"
找到 JAVA_OPTS 参数进行修改,-Xms 是最小内存,-Xmx 是最大内存,具体后面给值多少由机器总内存大小来分配
-
日志中出现 Too many open files
这个是由于我们系统安装没有修改 linux 系统最大文件打开数量导致的,由于 linux 这个参数最小值是 1024,远远不能满足我们系统运行要求,所以要修改。
root 用户修改这个文件:vi /etc/security/limits.conf
在最后加上两行,isearch 为系统安装用户,如果是 root 安装,直接写 root:
isearch - nproc 10240 isearch - nofile 65536
保存文件后直接登陆 su - isearch,用命令查看是否生效:
[isearch@isearch181:~]$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 46663 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65536 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 10240 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
最后要重启 tomcat
-
日志中出现 java.io.IOException: Connection reset by peer
1) 有可能是 mysql 数据库有问题,导致程序不能正常连上 mysql, 检查 mysql 状态是否正常,用命令看是否能登陆进去
2) 有可能是 elasticsearch 有问题,用 elasticsearch-head 可以查看 elasticsearch 是否正常
3) 有可能是 solr 有问题, 用 solr 管理页面查看 solr 是否正常 -
如果 10080 页面不能访问,把 10080 端口换成 9080 试试,如果也不能访问,说明 tomcat 有问题,如果能访问,说明 nginx 有问题
-
用 df -h 命令查看系统硬盘是否被占满
-
命令查看是否某个 tomcat 进程 cpu 占用比很高,用下面的步骤来查看是否是 tomcat 进程:
top 命令得到占用 CPU 高的 pid:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22265 test 20 0 3171m 425m 15m S 213.3 17.3 42:22.12 java
ps -ef | grep tomcat | grep -v elasticsearch | grep 22265
如果有值,那就是 tomcat 占用 CPU 很高,需要进一步查看原因。
-
查看 linux 是否出现大量的 CLOSE_WAIT
由于目前 CSM 的 solr 和 UEBA 的 elasticsearch,程序中的做法是保持长连接,有可能会因为网络不稳定产生 CLOSE_WAIT,但是这个数量很少且不影响系统,故查询的时候需要排除。去除 solr(单机, 端口 8983) 的命令:
netstat -anp | grep CLOSE_WAIT | grep -v 8983 | wc -l
去除 solr(集群,端口 8080) 命令
netstat -anp | grep CLOSE_WAIT | grep -v 8983 | wc -l
去除 elasticsearch(UEBA6.0 版本端口 9200) 的命令:
netstat -anp | grep CLOSE_WAIT | grep -v 9200 | wc -l
去除 elasticsearch(UEBA7.0 版本端口 6200) 的命令:
netstat -anp | grep CLOSE_WAIT | grep -v 6200 | wc -l
如果上面命令执行后数字比较大,需要进一步寻找原因。