1、CPU优化
工具
stress :linux系统压力测试工具
sysstat :包含常用的linux性能工具,用来监控和分析系统的性能
sysbench:是一个多线程的基准测试工具,一般用来评估不同系统参数下的数据库负载情况;
perf:以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析制定应用程序的性能问题;
ab: apache bench 是一个常用的http服务性能测试工具,用来模拟客户端请求;
定义内容
首先通过uptime查看系统负载,然后使用mpstat结合pidstat来初步判断到底是cpu计算量大还是进程争抢过大或者是io过多,接着使用vmstat分析切换次数,以及切换类型,来进一步判断到底是io过多导致问题还是进程争抢激烈导致问题。
CPU 使用率是最直观和最常用的系统性能指标,更是我们在排查性能问题时,通常会关注的第一个指标。所以我们更要熟悉它的含义,尤其要弄清楚用户(%user)、Nice(%nice)、系统(%system) 、等待 I/O(%iowait) 、中断(%irq)以及软中断(%softirq)这几种不同 CPU 的使用率。比如说:用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。碰到 CPU 使用率升高的问题,你可以借助 top、pidstat 等工具,确认引发 CPU 性能问题的来源;再使用 perf 等工具,排查出引起性能问题的具体函数。
2、内存性能
定义内容
多级页表和大页,页表存储在MMU【内存管理单元】,页表记录了虚拟内存地址和物理内存地址的映射关系;
Buffer 既可以用作“将要写入磁盘数据的缓存”,也可以用作“从磁盘读取数据的缓存”。
Cache 既可以用作“从文件读取数据的页缓存”,也可以用作“写文件的页缓存”。
工具
bcc 软件包--它提供了一系列的 Linux 性能分析工具,常用来动态追踪进程和内核的行为。
cachestat 提供了整个操作系统缓存的读写命中情况。
cachetop 提供了每个进程的缓存命中情况。
echo 3 > /proc/sys/vm/drop_caches 清理缓存
memleak 可以跟踪系统或指定进程的内存分配、释放请求,然后定期输出一个未释放内存和相应调用栈的汇总情况(默认 5 秒
linux内核使用kswapd0来定期回收内存,为了衡量内存的使用情况,定义了三个内存阈值(watermark)
分别是页最小阈值(pages_min)、页低阈值(pages_low)、页高阈值(pages_high),剩余内存(pages_free)
剩余内存小于页最小阈值,说明进程可用内存都耗尽了,只有内核才可以分配内存。
剩余内存落在页最小阈值和页低阈值中间,说明内存压力比较大,剩余内存不多了。这时 kswapd0 会执行内存回收,直到剩余内存大于高阈值为止。
剩余内存落在页低阈值和页高阈值中间,说明内存有一定压力,但还可以满足新内存请求。
剩余内存大于页高阈值,说明剩余内存比较多,没有内存压力。
对文件页的回收,当然就是直接回收缓存,或者把脏页写回磁盘后再回收。
而对匿名页的回收,其实就是通过 Swap 机制,把它们写入磁盘后再释放内存。
先用 free 和 top,查看系统整体的内存使用情况。
再用 vmstat 和 pidstat,查看一段时间的趋势,从而判断出内存问题的类型。
最后进行详细分析,比如内存分配分析、缓存 / 缓冲区分析、具体进程的内存使用分析等。