系统调优-5(分析内存)

strace

strace命令是一个集诊断、调试、统计与一体的工具. 查看一个命令或进程在执行中发生了多少次系统调用.

常用用法举例:

strace -c ifconfig # 统计发生了多少次系统调用
strace -c -S calls ifconfig # 以字段 calls 排序显示系统调用
strace -f ls # 统计fork 出的子进程调用
strace -e open ifconfig # 只看open打开系统调用的情况
# 工作中常用的是依据系统pid跟踪程序在做什么
strace -p PID  

 ltrace

ltrace命令是用来跟踪进程调用库函数的情况。

getconf

getconf 查看系统详细信息

常用用法举例

getconf -a | grep -i cache_size  # 查看 CPU 缓存
LEVEL1_ICACHE_SIZE                 32768
LEVEL1_DCACHE_SIZE                 32768
LEVEL2_CACHE_SIZE                  1048576
LEVEL3_CACHE_SIZE                  34603008
LEVEL4_CACHE_SIZE                  0
[root@wpic ~]# getconf -a | grep -i page_size # 查看内存页大小
PAGE_SIZE                          4096

CPU 缓存调度

数据存储单位

CPU:line

MEMORY: page

DISK :  block

一致性内存访问

write-through  :一级一级缓存写,直到写到磁盘

write-back: 只写到一级缓存,标记数据为 dirty, 然后当一级缓存不够用时再写到二级缓存

CPU 缓存映射方式

  • 直接映射缓存
  • 全关联映射缓存
  • 两路或多路关联映射缓存
[root@emergo ~]# x86info -c  # 查看内存映射方式
x86info v1.30.  Dave Jones 2001-2011
Feedback to <davej@redhat.com>.

Found 2 identical CPUs
Extended Family: 0 Extended Model: 4 Family: 6 Model: 79 Stepping: 1
Type: 0 (Original OEM)
CPU Model (x86info's best guess): Unknown model. 
Processor name string (BIOS programmed): Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz

Cache info
TLB info
 Data TLB: 4KB pages, 4-way associative, 64 entries
 Data TLB: 4KB pages, 4-way associative, 64 entries
 64 byte prefetching.
Found unknown cache descriptors: 63 76 b5 c3 ff 
Total processor threads: 2
This system has 1 single-core processor with hyper-threading (2 threads per core) running at an estimated 2.50GHz

检查缓存命中率

valgrind

# 安装
yum install valgrind
# 检查命令或脚本的 cpu 缓存命中率
]# valgrind --tool=cachegrind 

内存泄漏

内存分类

  • 虚拟内存    page
  • 物理内存    page frames

应用程序调用内存

  1. 申请虚拟内存,每个进程都会有自己的虚拟内存空间
  2. 程序运行时分配物理内存

内存泄漏

  • 内存泄漏处理方法

           发现内存泄漏后,只能 kill 内存泄漏的进程,或这个重启进程

  • 测试内存泄漏

           valgrind --tool=memcheck ls   # 检查 ls 命令在执行过程中是否存在内存泄漏

  • 内存泄漏的两种情况

           1. 虚拟内存增大,物理内存不怎么变化

           2. 虚拟内存和物理内存同时增大

  • 监控内存变化

          watch -n 1 free -m  # 1 秒钟收集一次

          watch -n 1  'free -m;grep Committed_AS' /proc/meminfo  # 从内存中读取文件信息

内存溢出 OOM

当物理内存耗尽之后,进程无法申请新的物理内存,就后导致内存溢出.

内存溢出操作系统处理流程

  • 系统 OOM killer 程序,会选择性的杀掉一部分进程
  • OOM 内核参数  cat /proc/sys/vm/panic_on_oom   0 :启动 OOM killer 程序   1:引发内核恐慌。 默认为 0.

OOM killer 程序

OOM killer 程序依据每个进程的参数值大小决定kill 那个进程

   例如:进程号为 1 的进程参数  /proc/1/oom_adj   

   oom_adj 取值范围:  -17-15 ,值越小越不容易被杀掉。

  手动触发一次 OOM killer: echo f > /proc/sysrq-trigger

 

 

  

 

posted @ 2018-05-21 12:03  步绍训  阅读(132)  评论(0)    收藏  举报