linux批量处理
系统级
CPU、中断、上下文切换、页换出换入
可用物理内存
网络丢包情况
域名IP映射
可用磁盘
可编写如下脚本获取host.txt
#!/bin/sh
vmstat 1 10 > host.txt
free | awk 'NR==2{print $7}' >> host.txt
netstat -in |awk '$1=="ens192"{print $0}' >> host.txt
cat /etc/hosts >> host.txt
cat /etc/hostname >> host.txt
df -h >> host.txt
应用级
端口队列
进程文件描述符
JVM启动参数(非JVM中间件无)
JVM堆内存使用情况(非JVM中间件无)
可编写如下脚本获取host.txt,其中ports.txt文件每行为一个Web端口号,对应一个进程,如
#!/bin/sh
for port in `cat ports.txt`
do
echo $port
echo '获取进程号'
netstat -nlp |grep :$port |awk '{print $7}' | awk -F '/' '{print $1}' >$pid'_'$port.txt
pid=$(cat $pid'_'$port.txt)
echo $pid
echo '获取backlog队列'
ss -ltnp |grep -w :$port | awk '{print $2" "$3}' > backlog$pid'_'$port.txt
echo '获取socket描述符'
echo 'ls /proc/$pid/fd | sort -r -n -k1 | awk "NR==1"'
ls /proc/$pid/fd | sort -r -n -k1 | awk 'NR==1' >limit$pid'_'$port.txt
echo "cat /proc/$pid/limits | awk '/^Max open files/ {print $4}'"
cat /proc/$pid/limits | awk '/^Max open files/ {print $4}' >> limit$pid'_'$port.txt
echo '获取启动参数'
jcmd $pid VM.flags > vmstart$pid'_'$port.txt
echo '获取堆信息'
jmap -heap $pid | awk '{if($1=="MaxHeapSize"||$1=="OldSize" ) print $3}' >>vmrun$pid'_'$port.txt
jmap -heap $pid | tail -n 3 | awk -F"%" 'NR==1{print $1}' >>vmrun$pid'_'$port.txt
done
常规检查项
### JDK位数
检查建议
64位
检查方法
1.定位进程使用的java路径(启动时weblogic或tomcat域日志中会打印路径)
2.在java路径下,执行java -version,返回结果有64表示64位,无则表示32位。
### Weblogic位数
检查建议
64位
检查方法
打开自己的weblogic安装目录,C:\Oracle\Middleware\wlserver_10.3\server\native,在native下有个文件夹。 如果为windows系统则为win/32,则为32位的系统, 如果为Linux系统则为 Linux/,如果有x86_64、64则为64位,如无则为32位。
### weblogic反向域名解析
检查建议
禁止
检查方法
域路径/config/config.xml文件查看“false”, 不存在则加上此行
### Tomcat位数检查
检查建议
64位
检查方法
命令行执行TOMCAT目录/bin/version.bat(Linux version.sh),查看“Architecture”值
### Tomcat反向域名解析
检查建议
禁止
检查方法
OMCAT目录/conf/server.xml,enableLookups设置为false
### CPU占用情况
检查建议
总体使用量<70%
检查方法
1.在windows系统,打开任务管理器->“性能”,可获知CPU利用率,其次点击CPU图右键,选择“逻辑处理器”,可看见每个CPU即核数;
2.在Linux系统,执行Top命令,见%CPU列,使用率=100%-id百分比;其次按1可看见CPU个数即核数。
### 物理内存
检查建议
可用内存>4G ,预留文件处理、socket网络连接、硬件缓存等。
检查方法
1.在windows系统,打开任务管理器->“性能”,可获知内存使用情况;
2.在Linux系统,执行free -m ,查看Mem行,其中可用内存free+buffers+cached。
### 磁盘
检查建议
每个分区可用大于30%
检查方法
1.在windows系统,查看我的电脑,可获知磁盘使用情况;
2.在Linux系统,执行df -h,可获知磁盘使用情况;也使用 df -i监控文件原数据使用情况。
### JVM内存
检查建议
单机所有-Xmx之和不超过物理内存-4G,
检查方法
通常主机中任务管理看到是物理内存,JVM内存分配的是虚拟内存。理论上虚拟内存大于等于物理内存,每个进程都有一个虚拟内存,一台主机上的所有进程可使用虚拟内存总和=物理内存+交换内存,交换内存使用额外压缩的物理内存或磁盘做存储,当应用虚拟内存使用不够时,会使用交换内存,交换内存使用会降低应用程序性能,所以生产上要求JVM最大内存<=操作物理内存-4G,其中-4G指的是为操作系统保留4G的文件缓存和网络缓存。32位程序虚拟内存一般限制在1.5G~2G,64位操作系统对虚拟内存可认为无限制(也跟总线有关)。在Windows Server 2003 系统测试下,3.5G物理内存,JDK 5.0下测试,最大JVM内存可设置为1478m。所以要求应用服务器、JVM、操作系统等软件必须为64位。
可内存配置多大没有统一的标准,跟系统复杂度、系统压力都有关,在业务高峰期执行 jstat(参考文档中的章节“7.1.1.1,7.1.2.1”),持续查看一段时间或在windows系统上使用JDK路径/bin/console.exe连接查看。以确定峰值使用情况。
##### jdk<=1.6
jstat -gcutil pid 3000 5 表示每3秒执行一次查看来年代内存O和垃圾回收次数FGC,若有明显增加,则进行第二步。
在JDK1.6版本中无jmap -heap命令,也可以通过jps -lmv观察-Xmx值,再使用jstat命令观察oldsize,计算占比。
jdk>1.6
jmap -heap pid 查看老年代Old Generation。
jmap -histo:live pid 强制执行垃圾回收。
再次执行jstat或jmap -heap ,观察老年代占比是否明显降低至<30%,没降低基本可以确定内存占用过多未释放。
### window cmd控制台
检查建议
屏幕宽度,高度500以下。
检查方法
windows环境下,查看域cmd窗口,点击头部空白处,属性->布局,查看屏幕缓冲区设置,宽度和高度调整至500以下。
mysql检查项
### 慢SQL
检查建议
SQL执行时间>5秒。
检查方法
按平均时间降序排列,按秒输出,调优的标准可以是>5秒的SQL
use `performance_schema`;
SELECT DIGEST_TEXT,AVG_TIMER_WAIT/1000/1000/1000/1000 FROM events_statements_summary_by_digest order by AVG_TIMER_WAIT desc
### 连接数量
检查建议
不小于5,不大于200,过小可能说明是否客户端存在问题或网络存在问题,过大说明压力大,要关注优化。
检查方法
查看在线连接数。
SHOW GLOBAL STATUS LIKE 'Threads_connected';
### 错误情况
检查建议
判断是否存在出错的SQL,或出错的SQL是否可接受。
检查方法
select * from events_statements_history h where h.errors >0 order by h.TIMER_END desc;
其他
化。
检查方法
查看在线连接数。
SHOW GLOBAL STATUS LIKE 'Threads_connected';
### 错误情况
检查建议
判断是否存在出错的SQL,或出错的SQL是否可接受。
检查方法
select * from events_statements_history h where h.errors >0 order by h.TIMER_END desc;
其他
参考https://www.modb.pro/db/624580