linux内存负载分析

简介: 衡量内存负载的一个很重要的指标就是页面置换的频率。当linux系统频繁的对页进行换进换出 的时候,说明物理内存不过,不得不进行频繁的置换页面。 使用vmstat(virtual memory statistics)进行内存负载分析 [oracle@zeng ~]$ vmstat 2 3 ...
衡量内存负载的一个很重要的指标就是页面置换的频率。当linux系统频繁的对页进行换进换出
的时候,说明物理内存不过,不得不进行频繁的置换页面。
使用vmstat(virtual memory statistics)进行内存负载分析
[oracle@zeng ~]$ vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 758668  19688  64508   56    0     0   256  263  118  3 22 74  2  0
 0  0      0 758668  19688  64532    0    0     0     0   21   10  0  1 99  0  0
 0  0      0 758668  19688  64532    0    0     0     0   19    7  0  1 100  0  0
对于内存负载分析其中关键的字段是:
swpd:虚拟内存的使用总量。
si:每秒从虚拟内存读入内存的大小。
so:每秒从内存写入虚拟内存的大小。
如果这3个字段的值比较高说明出现了内存瓶颈。
也可以使用free 来标识内存的负载情况.
[oracle@zeng ~]$ free
             total       used       free     shared    buffers     cached
Mem:        911564     155492     756072          0      20564      65696
-/+ buffers/cache:      69232     842332
Swap:      3481592          0    3481592
如果发现linux 系统使用了其中大部分的物理内存。这是正常的linux使用这些物理内存来
提升系统的性能。其中要注意的是swap 那一行.
[oracle@zeng ~]$ free -s 3 
             total       used       free     shared    buffers     cached
Mem:        911564     155748     755816          0      20620      65732
-/+ buffers/cache:      69396     842168
Swap:      3481592          0    3481592
 
             total       used       free     shared    buffers     cached
Mem:        911564     155748     755816          0      20620      65732
-/+ buffers/cache:      69396     842168
Swap:      3481592          0    3481592
-s 选项表示间隔多少秒,报告一次内存负载情况。使用Ctrl+C退出。可以把上面
的输出重定向到文件。
也可以通过查看虚拟文件 /proc/meminfo 来查看内存的负载情况。
[oracle@zeng ~]$ cat /proc/meminfo  
MemTotal:         911564 kB
MemFree:          239024 kB
Buffers:           23304 kB
Cached:           513724 kB
SwapCached:            0 kB
Active:           216272 kB
Inactive:         387160 kB
如果你在输出中看到SwapFree 字段的值较低,说明你的系统内存负载很高,需要添加
额外的内存,或者监控系统进程对内存的使用情况,把一些不需要的进程结束掉。缓解
内存负载。vmstat,free,cat /proc/meminfo 都可以和watch 一起配合使用。
使用sar 进行实时,当天,当天前本月的其他天的内存负载情况分析。
使用sar 进行历史内存发展分析.
[oracle@zeng ~]$ sar -B -f /var/log/sa/sa08
Linux 2.6.32-71.el6.i686 (zeng)         03/08/2012      _i686_  (1 CPU)
 
09:50:01 AM       LINUX RESTART
 
10:00:02 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
10:10:01 AM      0.00     79.83      0.00    124.61      0.00      0.00      0.00      0.00      0.00
10:20:01 AM      0.00      1.42      0.00     51.98      0.00      0.00      0.00      0.00      0.00
10:30:01 AM      0.00    113.79      0.00    135.36      0.00      0.00      0.00      0.00      0.00
10:40:02 AM      0.00      0.02      0.00     32.64      0.00      0.00      0.00      0.00      0.00
10:50:01 AM      0.00      0.02      0.00     33.78      0.00      0.00      0.00      0.00  
-B 表示报告系统的分析统计情况。
pgpgin/s :每秒从磁盘中调入的大小,bytes。
pgpgout/s :每秒从内存中换出的大小,bytes。
-f 表示要从哪个历史日志文件中读取相应的报告数据。/var/log/sa/saNN NN表示本月的天数。
[oracle@zeng ~]$ sar -W -f /var/log/sa/sa13
Linux 2.6.32-71.el6.i686 (zeng)         03/13/2012      _i686_  (1 CPU)
 
12:57:10 PM       LINUX RESTART
 
01:00:02 PM  pswpin/s pswpout/s
01:10:02 PM     20.41      0.00
01:20:01 PM     58.31      0.00
01:30:02 PM     19.76      0.00
01:40:01 PM     20.00      0.00
01:50:01 PM     19.75      0.00
02:00:01 PM     19.98      0.00
02:10:01 PM     33.62      0.00
02:20:01 PM     20.94      0.00
02:30:01 PM     20.84      0.00
02:40:01 PM     20.40      0.00
-W 表示报告交换的统计情况。
pswpin/s:每秒置换进来的大小。
pswpout/s:每秒置换出的大小。
如果这两个值较高,说明内存负载大。
使用sar 进行实时内存负载分析.
[oracle@zeng ~]$ sar -W 3 5
Linux 2.6.32-71.el6.i686 (zeng)         03/14/2012      _i686_  (1 CPU)
 
10:54:01 AM  pswpin/s pswpout/s
10:54:04 AM     22.61      0.00
10:54:07 AM     17.02      0.00
10:54:10 AM     22.38      0.00
10:54:13 AM     16.84      0.00
10:54:16 AM     22.30      0.00
Average:        20.24      0.00
3 表示报告的时间间隔s。
5 表示报告的次数。
使用sar 进行当前内存负载分析。
[oracle@zeng ~]$ sar -W
Linux 2.6.32-71.el6.i686 (zeng)         03/14/2012      _i686_  (1 CPU)
 
09:48:13 AM       LINUX RESTART
09:50:02 AM  pswpin/s pswpout/s
10:00:01 AM      1.00      0.00
10:10:01 AM      0.61      0.00
10:20:01 AM     19.49      0.00
10:30:02 AM     29.70      0.00
10:40:01 AM     38.41      0.00
10:50:02 AM     20.49      0.00
Average:        18.07      0.00
[oracle@zeng ~]$ sar -r
Linux 2.6.32-71.el6.i686 (zeng)         03/14/2012      _i686_  (1 CPU)
 
09:48:13 AM       LINUX RESTART
 
09:50:02 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
10:00:01 AM    755660    155904     17.10     20240     65580    176952      4.03
10:10:01 AM    755684    155880     17.10     20628     65732    176056      4.01
10:20:01 AM    209720    701844     76.99     23648    537324    693520     15.79
10:30:02 AM    177240    734324     80.56     24452    568336    693476     15.79
10:40:01 AM     60144    851420     93.40     86464    576484    694376     15.81
10:50:02 AM     59284    852280     93.50     87264    576512    694376     15.81
Average:       336289    575275     63.11     43783    398328    521459     11.87
-r 表示报告内存使用率统计。
字段解释:
kbmemfree  空闲内存大小。
kbmemused  已被使用的内存大小。
%memused   被使用的内存占总内存的百分比。
kbbuffers  被用作buffer 的内存大小。
kbcached   被用作cache 的内存大小。
kbcommit   确保当前的工作负载,所需要的内存大小。以保证不需要使用到swap。
%commit    kbcommit 与 RAM+swap 的比值。
目录
相关文章
|
11天前
|
程序员 编译器 C++
【C++核心】C++内存分区模型分析
这篇文章详细解释了C++程序执行时内存的四个区域:代码区、全局区、栈区和堆区,以及如何在这些区域中分配和释放内存。
27 2
|
1月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
|
11天前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
22 1
|
13天前
|
存储 Prometheus NoSQL
Redis 内存突增时,如何定量分析其内存使用情况
【9月更文挑战第21天】当Redis内存突增时,可采用多种方法分析内存使用情况:1)使用`INFO memory`命令查看详细内存信息;2)借助`redis-cli --bigkeys`和RMA工具定位大键;3)利用Prometheus和Grafana监控内存变化;4)优化数据类型和存储结构;5)检查并调整内存碎片率。通过这些方法,可有效定位并解决内存问题,保障Redis稳定运行。
|
29天前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
1月前
|
NoSQL 程序员 Linux
轻踩一下就崩溃吗——踩内存案例分析
踩内存问题分析成本较高,尤其是低概率问题困难更大。本文详细分析并还原了两个由于动态库全局符号介入机制(it's a feature, not a bug)触发的踩内存案例。
WK
|
2月前
|
监控 Ubuntu Linux
Linux系统平均负载如何查看?
在Linux系统中,有多种命令可用于查看平均负载,包括实时和历史数据。常用方法有:`uptime`命令显示系统运行时间和平均负载;`top`命令实时监控系统进程和资源使用;`w`命令展示用户信息及负载;通过`cat /proc/loadavg`查看特定文件中的负载信息;`sar`命令提供详尽的系统资源监控;而`htop`则以交互方式展示系统负载和资源使用情况。这些工具帮助用户全面了解系统性能状态。
WK
26 2
|
2月前
|
Python
Python变量的作用域_参数类型_传递过程内存分析
理解Python中的变量作用域、参数类型和参数传递过程,对于编写高效和健壮的代码至关重要。正确的应用这些概念,有助于避免程序中的错误和内存泄漏。通过实践和经验积累,可以更好地理解Python的内存模型,并编写出更优质的代码。
18 2
|
16天前
|
存储 传感器 Linux
STM32微控制器为何不适合运行Linux系统的分析
总的来说,虽然技术上可能存在某些特殊情况下将Linux移植到高端STM32微控制器上的可能性,但从资源、性能、成本和应用场景等多个方面考虑,STM32微控制器不适合运行Linux系统。对于需要运行Linux的应用,更适合选择ARM Cortex-A系列处理器的开发平台。
86 0
|
2月前
|
NoSQL Java 测试技术
Golang内存分析工具gctrace和pprof实战
文章详细介绍了Golang的两个内存分析工具gctrace和pprof的使用方法,通过实例分析展示了如何通过gctrace跟踪GC的不同阶段耗时与内存量对比,以及如何使用pprof进行内存分析和调优。
55 0
Golang内存分析工具gctrace和pprof实战

热门文章

最新文章

下一篇
无影云桌面