性能分析-01
一、机器配置查看
# 总核数=物理CPU个数x每颗物理CPU的核数
# 总逻辑CPU数=物理CPU个数x每颗物理CPU的核数x超线程数
grep "physical id" /proc/cpuinfo |uniq |wc -l # 查看物理CPU个数
grep "processor" /proc/cpuinfo |wc -l # 查看逻辑CPU的个数
grep "cpu cores" /proc/cpuinfo |uniq # 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo |grep name |cut -d: -f2 |uniq -c # 查看CPU信息(型号)
cat /proc/cpuinfo |grep MHz |uniq # 查看CPU主频
cat /proc/cpuinfo |grep name |cut -d: -f2 |uniq -c
二、常用分析工具
-
主要分析工具
vmstat、sar、mpstat、pidstat
:检测是否存在CPU瓶颈(线程);vmstat、free
:检测是否存在内存瓶颈(进程);iostat
:检测是否存在磁盘I/O瓶颈;netstat
:检测是否存在网络I/O瓶颈;
-
排查流程
- CPU:
top jstack vmstat
- 磁盘:
df iostat iotop
- 内存:
free OOM
- 网络:
netstat
- CPU:
-
tcpdump的用法
- tcpdump 是一款网络抓包工具,用于捕捉网络上的数据包,并将其打印出来或保存到文件中供以后分析使用。
tcpdump -vvv -nn -i eth0 icmp and src 192.168.10.7
:捕获源IP地址为 192.168.10.7 的 ICMP 数据包。tcpdump -vvv -nn -q -XX -i eth0 tcp dst port 22
:捕获目标端口为22的TCP数据包。tcpdump -vvv -XX -nn -i eth0 src 192.168.9.73 and dst port 10001
:捕获源 IP 地址为 192.168.9.73,目标端口为 10001 的数据包。tcpdump -i eth0 upd port 1814 -w ./udp.cap
:捕获端口为 1814 的 UDP 数据包。
-
2.1. java 分析工具
-
Linux top命令详解:持续监听进程运行状态 (biancheng.net)
top(**1分钟、5分钟、15分钟的负载情况**)
# 命令查看占用CPU高的进程PID(如果CPU是单核的,则负载数值超过1就是高负载;如果CPU是四核的,则负载数值超过4就是高负载,一般认为不应该超过服务器CPU的核数)
运行(R)、空闲(I)、不可中断睡眠(D)、可中断睡眠(S)、僵尸(Z)、暂停(T)
top -Hp 进程PID
# 看占用CPU最高的线程PID(Shift+p)printf "%x\n" 23891 ⇒5d53
# 将线程ID转为16进制线程PIDjstack 进程PID > thread_stack.log
# 保存线程栈日志jstack 进程PID |grep -20 5d53
jstat -gcutil 4241 2000
-
几个例子
1. vmstat 5 5 # Virtual Memory Statistics [xy@VM-16-11-centos ~]$ vmstat 5 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 75752 213904 1404116 0 0 0 9 1 0 0 0 99 0 0 0 0 0 74992 213904 1404152 0 0 0 0 614 1083 0 0 99 0 0 ... ... ... ... ... ... 0 0 0 75300 213904 1404168 0 0 0 7 635 1178 0 0 100 0 0 2. sar -u 3 2 整体/ sar -d 3 5 磁盘/ sar -r 5 2 内存 3. mpstat -P ALL 5 # Multiprocessor Statistics 4. iostat -d -k -x 3 2 [xy@VM-16-11-centos ~]$ iostat -d -k -x 3 2 Linux 3.10.0-1160.45.1.el7.x86_64 (VM-16-11-centos) 10/18/2022 _x86_64_ (2 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 1.47 0.01 2.27 0.31 17.61 15.69 0.00 2.06 4.06 2.05 0.45 0.10 scd0 0.00 0.00 0.00 0.00 0.00 0.00 102.08 0.00 0.73 0.73 0.00 0.41 0.00 ps aux |grep mysqld |grep –v grep |awk '{print $2 }' |xargs kill -9 # 杀掉某一程序; |xargs -i kill -9 {} |xargs -I{} kill -9 {} ps -elf |awk '{if ($2 == "Z"){print $4}}' |xargs kill -9 # 杀掉Zombie pstree -a -u -p # 抓取 UDP端口数据 tcpdump -c 5 -vvv -nn -i eth0 icmp and src 192.168.100.62 tcpdump -c 2 -vvv -nn -i eth0 -q -XX tcp dst port 22 nc -vuz x.x.x.x xxxx nc -vu x.x.x.x xxxx
三、关于iptables
3.1. 概览 流程图⌛
1)iptables是Linux防火墙工作在用户空间的管理工具,是基于内核的防火墙,是
netfilter/iptables
IP信息包过滤系统是一部分,用来设置、维护和检查 Linux 内核的 IP 数据包过滤规则。2)四表: raw mangle nat filter
3)五链:PREROUTING INPUT FORWARD OUTPUT POSTROUTING
raw表 | mangle表 | nat表 | filter表(默认) |
---|---|---|---|
PREROUTING链 | PREROUTING链 | PREROUTING链 | |
数据包刚到达防火墙改变目的地址DNAT | INPUT链 | ||
主要对外部包进入linux系统进行信息过滤 | |||
OUTPUT链 | POSTROUTING链 | POSTROUTING链 | |
数据包离开防火墙改变源地址SNAT | FORWARD链 | ||
主要对内部linux系统索要发送的包进行信息过滤 | |||
/ | INPUT链 | OUTPUT链 | |
改变本地产生的包的目的地址 | OUTPUT链 | ||
将外面过来的包传递到内部计算机中 | |||
/ | OUTPUT链 | / | 链里是对应的规则 |
/ | FORWARD链 | / | / |
在连接跟踪之前处理数据包 | 拆解报文,做出修改,重新封装功能 | 网络地址转换功能,内核模块 | 过滤功能,防火墙,内核模块 |
3.2. 语法规则
3.3. iptables基本使用
# iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
# 1)默认filter表;
# 2)默认表内所有链;
# 3)选项、链名、控制类型使用大写字母,其余均为小写;
iptables -nvL --line-numbers # 查看规则并显示序号
iptables -F # 清空规则链, Flush
iptables -P INPUT DROP # 设置默认策略, Plicy
iptables-save > 20220327.iptable
iptables-restore < 20220327.iptable
iptables -I INPUT -p icmp -j ACCEPT # iptables -I 头部添加新规则 INPUT规则链 -p icmp ACCEPT动作
iptables -D INPUT 1 # iptables -D 删除 INPUT链1号规则
iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j REJECT # 禁止源自该网段流量访问本机sshd服务
# 端口转发 路由前(PREROUTING)
iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.16.1:8080 # 端口转发
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 # 端口转发 路由前
# setting for loopback interface
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
本文来自博客园,作者:anyu967,转载请注明原文链接:https://www.cnblogs.com/anyu967/articles/17308375.html