性能分析-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

Linux查看物理CPU个数、核数、逻辑CPU个数

线上故障排查全套路,运维小哥可自查~

二、常用分析工具

  • 主要分析工具

    • vmstat、sar、mpstat、pidstat:检测是否存在CPU瓶颈(线程);
    • vmstat、free:检测是否存在内存瓶颈(进程);
    • iostat:检测是否存在磁盘I/O瓶颈;
    • netstat:检测是否存在网络I/O瓶颈;
  • 排查流程

    • CPU:top jstack vmstat
    • 磁盘:df iostat iotop
    • 内存:free OOM
    • 网络:netstat
  • 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 数据包。
  • 参考
    全网最详细的 tcpdump 使用指南

    image

    image

    image

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进制线程PID
    • jstack 进程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/iptablesIP信息包过滤系统是一部分,用来设置、维护和检查 Linux 内核的 IP 数据包过滤规则。

2)四表: raw mangle nat filter

3)五链:PREROUTING INPUT FORWARD OUTPUT POSTROUTING

image

image

raw表 mangle表 nat表 filter表(默认)
PREROUTING链 PREROUTING链 PREROUTING链
数据包刚到达防火墙改变目的地址DNAT INPUT链
主要对外部包进入linux系统进行信息过滤
OUTPUT链 POSTROUTING链 POSTROUTING链
数据包离开防火墙改变源地址SNAT FORWARD链
主要对内部linux系统索要发送的包进行信息过滤
/ INPUT链 OUTPUT链
改变本地产生的包的目的地址 OUTPUT链
将外面过来的包传递到内部计算机中
/ OUTPUT链 / 链里是对应的规则
/ FORWARD链 / /
在连接跟踪之前处理数据包 拆解报文,做出修改,重新封装功能 网络地址转换功能,内核模块 过滤功能,防火墙,内核模块

3.2. 语法规则

25个iptables常用示例

25个iptables非常经典的用法

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
posted on 2023-04-12 00:03  anyu967  阅读(24)  评论(0)    收藏  举报