系统性能优化-持续更新

    xiaoxiao2025-02-25  62

    文章目录

    CPU概念相关概念分析工具使用方式 内存相关概念分析工具使用方式 IO相关概念工具使用方式 网络工具使用方式 系统负载概念工具使用 具体

    CPU

    概念

    分析CPU时,主要分析CPU的调度以及性能。线程本身有很多种状态:

    状态备注描述RrunningSsleepingDDisk sleepZzombieIidle

    但线程针对于CPU只有两种状态:

    on-CPU:执行占用CPU中,并且分为用户态时间user和系统态时间sys;off-CPU:等待CPU,或者等待I/O,锁,换页等,具体状态包括可执行,匿名换页,睡眠,锁,空闲等状态。

    相关概念

    核数 硬件线程 时钟频率 CPI/IPC 用户态时间/系统态时间 运行队列

    分析工具

    工具描述top监控每个进程的cpu用量uptime平均负载vmstat包括系统范围的cpu平均负载mpstat查看所有cpu的核信息sar -u查看cpu信息pidstat查看进程cpu用量分解perfcpu剖析

    使用方式

    //查看系统cpu使用情况 // 1键查看所有核的使用率; P按照cpu占用率进行排序;c显示完整的命令 top //查看所有cpu核信息 mpstat -P ALL 1 //查看cpu使用情况以及平均负载 vmstat 1 //进程cpu的统计信息 pidstat -u 1 -p pid //跟踪进程内部函数级cpu使用情况

    内存

    相关概念

    物理内存虚拟内存常驻内存虚拟地址空间页缓存缺页换页用户态内存分配器:libc,glibc,libmalloc,mtmalloc内核态内存分配器:slub分配器。

    分析工具

    工具描述free查看系统整体内存情况vmstat虚拟内存统计信息top查看每个进程内存占用pidstat查看活动进程的内存占用pmap查看进程的内存映像sar -r查看内存情况dtrace动态跟踪valgrind内存检查工具

    使用方式

    // M按照内存使用排序 top //1s采集周期,获取内存的统计信息 pidstat -p pid -r 1 //查看进程的内存映像信息 pmap -d pid //检测程序内存问题 valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./程序名

    IO

    磁盘是系统中最慢的子系统。

    相关概念

    文件系统VFS文件系统缓存页缓存page cache缓存区高速缓存buffer cache目录缓存inodeinode缓存noop调用策略

    工具

    工具描述iostat磁盘详细统计信息iotop按进程查看磁盘IO的使用情况pidstat按进程查看磁盘IO的使用情况perf跟踪工具

    使用方式

    //查看系统io信息 iotop //统计io详细信息 iostat -d -x -k 1 10 //查看进程级io的信息 pidstat -d 1 -p pid //查看系统IO的请求,比如可以在发现系统IO异常时,可以使用该命令进行调查,就能指定到底是什么原因导致的IO异常 perf record -e block:block_rq_issue -ag perf report

    网络

    工具

    工具描述pingtraceroute跟踪源主机和目标机直接的路由信息netstat查看进程和端口之间的统计数据,以及TCP/UDP等协议包的统计信息ss查看socket统计信息tcpdumptcpflowtcp统计流sar -n DEV网卡流量情况sar -n SOCK查询网络以及TCP/UDP状态信息

    使用方式

    //显示网络统计信息 netstat -s //显示当前UDP连接状况 netstat -nu //显示UDP端口号的使用情况 netstat -apu //统计机器中网络连接各个状态个数 netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' //显示TCP连接 ss -t -a //显示sockets摘要信息 ss -s //显示所有udp sockets ss -u -a //tcp,etcp状态 sar -n TCP,ETCP 1 //查看网络IO sar -n DEV 1 //抓包以包为单位进行输出 tcpdump -i eth1 host 192.168.1.1 and port 80 //抓包以流为单位显示数据内容 tcpflow -cp host 192.168.1.1

    系统负载

    概念

    系统负载可以简单理解为运行队列的长度

    工具

    工具描述topuptimestrace跟踪系统调用以及每个系统调用的执行时间dmesg查看系统日志

    使用

    //查看负载情况 uptime top vmstat //统计系统调用耗时情况 strace -c -p pid //跟踪指定的系统操作例如epoll_wait strace -T -e epoll_wait -p pid //查看内核日志信息 dmesg

    具体

    查看当前系统整体负载:这时候最好不要直接上top,有可能会影响整体系统的情况。 uptime :查看系统1/5/15分钟内的系统运行情况CPU: vmstat:查看等待执行的任务数和当前系统core的数量关系 mpstat: -P ALL 1 :查看CPU在各个层面的占用率 pidstat:查看每个进程占用CPU的具体情况 taskset:查看每个进程的亲和性内存 /proc/meminfo:查看系统内存的总体情况 free:同上磁盘IO iostat:-xz 1 : 查看所有磁盘的读写带宽/读写请求数/设备使用率 r/s,w/s,rkB/s,wkB/s分别表示每秒设备读次数,写次数,读的KB数,写的KB数。它们描述了磁盘的工作负载。也许性能问题就是由过高的负载所造成的awaitI/O平均时间,以毫秒作单位。它是应用中I/O处理所实际消耗的时间,因为其中既包括排队用时也包括处理用时。如果它比预期的大,就意味着设备饱和了,或者设备出了问题avgqu-sz分配给设备的平均请求数。大于1表示设备已经饱和了。(不过有些设备可以并行处理请求,比如由多个磁盘组成的虚拟设备)%util设备使用率。这个值显示了设备每秒内工作时间的百分比,一般都处于高位。低于60%通常是低性能的表现(也可以从await中看出),不过这个得看设备的类型。接近100%通常意味着饱和. 网络 sar: -n DEV 1:查看网卡的读写带宽情况 -n TCP,ETCP 1:Tcp协议的操作情况中断情况 /proc/interrupts:查看系统当前所有的中断情况 中断号中断次数中断设备名称 Top命令: 查看线程执行在具体的core上: top -H -> f/F键 -> “Last Used Cpu (SMP)” 按照CPU使用率排序: -H 按照内存使用率排序:-M 展示所有core的使用情况:top -> 1键trace ftrace,编译时使用-pg选项,会在函数入口处增加一条call mcount指令。

    https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/index.html

    最新回复(0)