阅读--充满power

根据不同的性能指标来找合适的工具:

阅读--充满power_第1张图片

先运行几个支持指标较多的工具,如 top/vmstat/pidstat,根据它们的输出可以得出是哪种类型的性能问题。定位到进程后再用 strace/perf 分析调用情况进一步分析。如果是软中断导致用 /proc/softirqs

阅读--充满power_第2张图片

CPU优化
  • 应用程序优化

    • 编译器优化:编译阶段开启优化选项,如gcc -O2

    • 算法优化

    • 异步处理:避免程序因为等待某个资源而一直阻塞,提升程序的并发处理能力。(将轮询替换为事件通知)

    • 多线程代替多进程:减少上下文切换成本

    • 善用缓存:加快程序处理速度

  • 系统优化

    • CPU绑定:将进程绑定要1个/多个CPU上,提高CPU缓存命中率,减少CPU调度带来的上下文切换

    • CPU独占:CPU亲和性机制来分配进程

    • 优先级调整:使用nice适当降低非核心应用的优先级

    • 为进程设置资源显示: cgroups设置使用上限,防止由某个应用自身问题耗尽系统资源

    • NUMA优化: CPU尽可能访问本地内存

    • 中断负载均衡: irpbalance,将中断处理过程自动负载均衡到各个CPU上

  • TPS、QPS、系统吞吐量的区别和理解

    • QPS(TPS)

    • 并发数

    • 响应时间

    • QPS(TPS)=并发数/平均相应时间

    • 用户请求服务器

    • 服务器内部处理

    • 服务器返回给客户
      QPS 类似 TPS,但是对于一个页面的访问形成一个 TPS,但是一次页面请求可能包含多次对服务器的请求,可能计入多次 QPS

    • QPS(Queries Per Second)每秒查询率,一台服务器每秒能够响应的查询次数.

    • TPS(Transactions Per Second)每秒事务数,软件测试的结果.

内存

如何查看内存使用情况

free来查看整个系统的内存使用情况

top/ps来查看某个进程的内存使用情况

  • VIRT 进程的虚拟内存大小

  • RES 常驻内存的大小,即进程实际使用的物理内存大小,不包括swap和共享内存

  • SHR 共享内存大小,与其他进程共享的内存,加载的动态链接库以及程序代码段

  • %MEM 进程使用物理内存占系统总内存的百分比

怎样理解内存中的Buffer和Cache?

buffer是对磁盘数据的缓存,cache是对文件数据的缓存,它们既会用在读请求也会用在写请求中

内存性能工具

根据不同的性能指标来找合适的工具:

阅读--充满power_第3张图片

内存分析工具包含的性能指标:

阅读--充满power_第4张图片

如何迅速分析内存的性能瓶颈

通常先运行几个覆盖面比较大的性能工具,如 free,top,vmstat,pidstat 等

  • 先用 free 和 top 查看系统整体内存使用情况

  • 再用 vmstat 和 pidstat,查看一段时间的趋势,从而判断内存问题的类型

  • 最后进行详细分析,比如内存分配分析,缓存/缓冲区分析,具体进程的内存使用分析等

常见的优化思路:

  • 最好禁止 Swap,若必须开启则尽量降低 swappiness 的值

  • 减少内存的动态分配,如可以用内存池,HugePage 等

  • 尽量使用缓存和缓冲区来访问数据。如用堆栈明确声明内存空间来存储需要缓存的数据,或者用 Redis 外部缓存组件来优化数据的访问

  • cgroups 等方式来限制进程的内存使用情况,确保系统内存不被异常进程耗尽

  • /proc/pid/oom_adj 调整核心应用的 oom_score,保证即使内存紧张核心应用也不会被OOM杀死

你可能感兴趣的:(Linux,运维,linux)