灵活运用Linux上xargs、find、netstat命令诊断应用或数据库连接数、实例异常。往往在诊断与处理复杂的应用、数据库、网络问题上突显出它大的优势,以下将我积累的此块知识分享给大家,希望大家喜欢,希望可以给大家在诊断问题时得到启发。
1.查看LINUX操作系统中指定文件中的内容是否存在:
#find 指定路径 -name '*.*' | xargs grep -n '关键字'
#find 指定路径 -name '*.*' -mmin -30 | xargs grep -n '关键字'
#find . -name 'jvm_gc*' -mmin -30 | xargs grep Full --查询30分钟前的GC日志文件中有Full字样的记录
#ps -ef|grep ora|grep -v grep|grep -v ora_|grep LOCAL=NO|awk '{print $2}'|xargs kill --杀掉所有的oracle的进程
#cd /erp701/erp/server/profiles --进入要查找apusic日志文件的路径
#find . -name 'apusic.log.*' | xargs grep CONFIG_EXCEPTION --再出现类似问题时,搜索日志中数据中心丢失引发的异常信息
#find /erp/erp2/server/profiles -name 'apusic.log.0' | xargs grep "java.sql.SQLException: Io exception: Socket is not connected" --这个命令可以搜索哪些实例出现过网络异常或连数据库异常。注意ifnd后面的路径正常(查找实例针对性的异常报错)。
2.在应用服务器上,用以下命令查看通过数据库1521端口连的客户端IP地址名称及连接总数(发现连接数据库的异常):
netstat -an | awk '{print $5}' | grep 1521 | sort |uniq -c
3.查连接实例1上的11034端口的连接数 和 IP地址:
netstat -antp | awk '/11034/ {print $5}' | sed 's/:[0-9]*$//' | sort | uniq -c
4.查看连Oracle数据库1521端口的java进程
netstat -antp | awk '/1521/ && /java/ {print $7}' | sort | uniq -c
找到进程号后,通过jstack命令收集java进程的线程信息jstack -l 进程号 > jstack.txt, 然后用jca(即java线程分析工具分析java core文件,如可以定位出线程死锁问题 deadlock detected in BGJOB_1 ApusicTimereThread-4)
5.查看EAS在线用户数(访问数据库1521端口连接数(应用服务器端执行)
netstat -tn|grep 1521|wc -l
6.看看有多少数据库连接(数据库服务器端执行)
netstat -ant | grep 1521 | wc -l
7.服务器端netstat检查性能衰减严重的server2连接情况
netstat -tn|grep 6890| wc –l
此端口连接数量在200-380之间
netstat -tn|grep 6890|grep SYN_RCVD|wc –l
SYN_RCVD状态(未完成的tcp连接,等待客户端第三次握手)的数量达到80-150几乎一半
据此判断,可能因为部分客户端,与服务器连接过程中,因网络异常等原因,造成tcp连接不能完成。SYN_RCVD状态的连接耗用了实例的连接池资源,致使客户端连接connect耗时异常。
8.找到管理控制台进程号,看是服务端的管理控制台还是客户端的管理控制台名称(包括adminserver和adminclient)
lsof -n -p 管理控制台进程号 | awk '{print $9}' | sort | uniq -c | sort -n
9.检查是否存在线程数量过多问题
ps -eLf | grep 管理控制台进程号 | wc -l