Linux服务器内存监控攻略
内存是Linux内核所管理的最重要的资源之一。内存管理系统是操作系统中最为重要的部分,因为系统的物理内存总是少于系统所需要的内存数量。虚拟内存就是为了克服这个矛盾而采用的策略。系统的虚拟内存通过在各个进程之间共享内存而使系统看起来有多于实际内存的内存容量。Linux支持虚拟内存, 就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。核心把当前不用的内存块存到硬盘,腾出内存给其他目的。当原来的内容又要使用时,再读回内存。
一、内存使用情况监测
(1)实时监控内存使用情况
在命令行使用“Free”命令能够监控内存使用情况
#free
total used free shared buffers cached
Mem: 256024 192284 63740 0 10676 101004
-/+ buffers/cache: 80604 175420
Swap: 522072 0 522072
上面给出了一个256兆的RAM和512兆交换空间的系统情况。第三行输出(Mem:)显示物理内存。total列不显示核心使用的物理内存(通常大约1MB)。used列显示被使用的内存总额(第二行不计缓冲)。 free列显示全部没使用的内存。Shared列显示多个进程共享的内存总额。Buffers列显示磁盘缓存的当前大小。第五行(Swap:)对对换空间,显示的信息类似上面。假如这行为全0,那么没使用对换空间。在缺省的状态下,free命令以千字节(也就是1024字节为单位)来显示内存使用情况。能够使用?h参数以字节为单位显示内存使用情况,或能够使用?m参数以兆字节为单位显示内存使用情况。还能够通过?s参数使用命令来不间断地监控内存使用情况:
#free ?b ?s2
这个命令将会在终端窗口中连续不断地报告内存的使用情况,每2秒钟更新一次。
(2)组合watch? free命令用来实时监控内存使用情况:
#watch -n 2 -d free
Every 2.0s: free Fri Jul 6 06:06:12 2007
total used free shared buffers cached
Mem: 233356 218616 14740 0 5560 64784
-/+ buffers/cache: 148272 85084
Swap: 622584 6656 615928
watch命令会每两秒执行 free一次,执行前会清除屏幕,在同样位置显示数据。因为 watch命令不会卷动屏幕,所以适合出长时间的监测内存使用率。能够使用 -n选项,控制执行的频率;也能够利用 -d选项,让命令将每次不同的地方显示出来。Watch命令会一直执行,直到您按下 [Ctrl]-[C] 为止。
二、虚拟内存的概念
(1)Linux虚拟内存实现机制
Linux虚拟内存的实现需要六种机制的支持:地址映射机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制、内存共享机制。
首先内存管理程式通过映射机制把用户程式的逻辑地址映射到物理地址,在用户程式运行时假如发现程式中要用的虚地址没有对应的物理内存时,就发出了请求页需要;假如有空闲的内存可供分配,就请求分配内存(于是用到了内存的分配和回收),并把正在使用的物理页记录在缓存中(使用了缓存机制)。 假如没有足够的内存可供分配,那么就调用交换机制,腾出一部分内存。另外在地址映射中要通过TLB(翻译后援存储器)来寻找物理页;交换机制中也要用到交换缓存,并且把物理页内容交换到交换文档中后也要修改页表来映射文档地址。
(2)虚拟内存容量设定
也许有人告诉您,应该分配2倍于物理内存的虚拟内存,但这是个不固定的规律。假如您的物理保存比较小,能够这样设定。假如您有1G物理内存或更多的话,能够缩小一下虚拟内存。Linux会把大量的内存用做Cache的,但在资源紧张时回收回.。您只要看到swap为0或很小就能够放心了,因为内存放着不用才是最大的浪费。
三、使甩vmstat命令监控虚拟内存使用情况
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。通常使用vmstat 5 5(表示在5秒时间内进行5次采样)命令测试。将得到一个数据汇总他能够反映真正的系统情况。
#vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 62792 3460 9116 88092 6 30 189 89 1061 569 17 28 54 2
0 0 62792 3400 9124 88092 0 0 0 14 884 434 4 14 81 0
0 0 62792 3400 9132 88092 0 0 0 14 877 424 4 15 81 0
1 0 62792 3400 9140 88092 0 0 0 14 868 418 6 20 74 0
1 0 62792 3400 9148 88092 0 0 0 15 847 400 9 25 67 0
vmstat命令输出分成六个部分:
(1)进程procs:
r:在运行队列中等待的进程数 。
b:在等待io的进程数 。
(2)内存memoy:
swpd:现时可用的交换内存(单位KB)。
free:空闲的内存(单位KB)。
buff: 缓冲去中的内存数(单位:KB)。
cache:被用来做为高速缓存的内存数(单位:KB)。
(3) swap交换页面
si: 从磁盘交换到内存的交换页数量,单位:KB/秒。
so: 从内存交换到磁盘的交换页数量,单位:KB/秒。
(4) io块设备:
bi: 发送到块设备的块数,单位:块/秒。
bo: 从块设备接收到的块数,单位:块/秒。
(5)system系统:
in: 每秒的中断数,包括时钟中断。
cs: 每秒的环境(上下文)转换次数。
(6)cpu中央处理器:
cs:用户进程使用的时间 。以百分比表示。
sy:系统进程使用的时间。 以百分比表示。
id:中央处理器的空闲时间 。以百分比表示。
假如 r经常大于 4 ,且id经常小于40,表示中央处理器的负荷很重。 假如bi,bo 长期不等于0,表示物理内存容量太小。
四、Linux 服务器的内存泄露和回收内存的方法
1、内存泄漏的定义:
一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程式从堆中分配的,大小任意的(内存块的大小能够在程式运行期决定),使用完后必须显示释放的内存。应用程式一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程式必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
2、内存泄露的危害
从用户使用程式的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统任何的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为他不会堆积,而隐式内存泄漏危害性则很大,因为较之于常发性和偶发性内存泄漏他更难被检测到。存在内存泄漏问题的程式除了会占用更多的内存外,还会使程式的性能急剧下降。对于服务器而言,假如出现这种情况,即使系统不崩溃,也会严重影响使用。
3、内存泄露的检测和回收
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程式的时候就会碰到。在 Linux 或 unix 下,C、C++语言是最使用工具。但是我们的 C++ 程式缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额。而且程式退出时,我们无法获知任何内存泄漏信息。
使用kill命令
使用Linux命令回收内存,我们能够使用Ps、Kill两个命令检测内存使用情况和进行回收。在使用终极用户权限时使用命令“Ps”,他会列出任何正在运行的程式名称,和对应的进程号(PID)。Kill命令的工作原理是:向Linux操作系统的内核送出一个系统操作信号和程式的进程号(PID)。
应用例子:
为了高效率回收内存能够使用命令ps 参数v:
[root@www ~]# ps v
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
2542 tty1 Ss+ 0:00 0 8 1627 428 0.1 /sbin/mingetty tty1
2543 tty2 Ss+ 0:00 0 8 1631 428 0.1 /sbin/mingetty tty2
2547 tty3 Ss+ 0:00 0 8 1631 432 0.1 /sbin/mingetty tty3
2548 tty4 Ss+ 0:00 0 8 1627 428 0.1 /sbin/mingetty tty4
2574 tty5 Ss+ 0:00 0 8 1631 432 0.1 /sbin/mingetty tty5
2587 tty6 Ss+ 0:00 0 8 1627 424 0.1 /sbin/mingetty tty6
2657 tty7 Ss+ 1:18 12 1710 29981 7040 3.0 /usr/bin/Xorg :0 -br -a
2670 pts/2 Ss 0:01 2 682 6213 1496 0.6 -bash
3008 pts/4 Ss 0:00 2 682 6221 1472 0.6 /bin/bash
3029 pts/4 S+ 0:00 2 32 1783 548 0.2 ping 192.168.1.12
3030 pts/2 R+ 0:00 2 73 5134 768 0.3 ps v
然后假如想回收Ping命令的内存的话,使用命令:
# Kill -9 3029
分享到:
相关推荐
在本文中,我们将深入探讨AIX和Linux内存监控的方法,以及内核内存管理的基本原理。 AIX系统使用虚拟内存管理器(VMM)来处理物理内存的分配和回收。VMM将内存划分为不同大小的页面,如Power4和Power5芯片支持的4K...
当你面对内存泄露的时候, 该程序时刻监视着你程序的内存使用情况. 你甚至可以用gdb 单步执行你的程序,来观察监视程序所报的内存使用量....linux 下的程序, 有源代码, 你可以修改程序成更顺手的工具.
《嵌入式Linux内存与性能详解》一书由史子旺撰写,专注于深入解析Linux内存管理机制以及如何在嵌入式环境中优化系统性能。Linux内存管理是操作系统的核心部分,理解和掌握这一领域对于开发者来说至关重要,尤其是在...
通过实验,学生们不仅掌握了Linux内存管理的基本原理,还学会了如何在实际编程中应用这些知识,以及如何使用工具进行系统监控。这有助于理解内存分配和回收的底层机制,以及如何优化程序内存使用。实验总结表明,...
【Linux集群内存球监控系统】是一个专为Linux集群设计的内存监控解决方案,旨在实时跟踪、分析和优化集群中各个节点的内存使用情况。系统通过Java开发实现,利用Java的跨平台特性,确保在不同的Linux环境下都能稳定...
本文将深入探讨Linux性能监控的重点,包括CPU、内存、IO和网络子系统的监控,以及如何针对不同类型的應用进行优化。 1. **CPU性能监控** - **上下文切换**:上下文切换是操作系统在多任务环境中切换进程执行的...
今天给大家介绍一款Linux运维监控工具 ——wgcloud,功能非常强大,完全开源! wgcloud支持显示CPU利用率、CPU温度、内存利用率、磁盘容量、磁盘IO、硬盘智能健康状态、系统负载、连接数、网卡流量、硬件系统信息等...
监控LINUX服务器内存、CPU、磁盘路径等信息钉钉、企业微信机器人发送消息提醒脚本,可使用定时任务来完成此功能
在Linux系统中,监控资源通常包括CPU使用率、内存占用、磁盘I/O、网络流量等关键指标。使用JMeter进行资源监控时,可以通过JMeter插件或者结合Linux自带的命令行工具来实现。例如,`top`或`htop`命令可以实时显示...
linux系统cpu、内存、IO等监控脚本 可以用作定时任务执行监控
LoadRunner通过其内置的监控功能,可以实时监控CPU使用率、内存消耗、磁盘I/O、网络带宽等关键性能指标。 监控Linux资源服务开启的过程通常包括以下步骤: 1. **配置监控参数**:在LoadRunner Controller中,你...
本篇文章将详细介绍如何利用Node.js进行Linux性能监测,包括网络吞吐率、服务器CPU监控以及内存监控。 首先,我们要理解Linux性能监测工具有哪些。在Linux环境下,有许多内置的命令行工具,如`top`、`vmstat`、`...
内核空间的页表是全局的,不受进程切换影响,这为实现全局内存监控提供了便利。同时,由于内核内存访问通常涉及系统关键功能,因此对这部分内存的监控尤为重要。 总的来说,该内存访问监控框架为Linux内核的安全性...
本资源《嵌入式Linux内存与性能详解》详细阐述了这些关键领域,为理解嵌入式系统的内在机制提供了深入见解。 1. **嵌入式系统概述**:嵌入式系统通常具有特定功能,它们在硬件限制下运行,如处理能力、内存大小和...
Linux内存管理是操作系统管理计算机内存资源的重要组成部分,它涉及到内存的分配、回收以及效率优化等多方面的技术。Linux内存管理采用的是一种三级架构模型,包括内存节点(node)、内存区域(zone)和物理页框(page)。...
很简单, 监控linux某进程内存的脚本
在Linux环境中,监控系统资源,尤其是内存使用情况...总之,通过Shell脚本结合`free`命令和邮件客户端,我们可以创建一个简单但实用的Linux内存监控系统,确保在没有专业监控软件的情况下也能对系统状态进行有效监控。
### Linux CPU、内存、I/O、磁盘等监控统一解决方案 #### 一、概述与需求背景 在Linux环境中,为了确保系统的稳定性和高效性,实时监控服务器的关键性能指标(如CPU利用率、内存使用情况、输入输出操作频率以及...
在下linux 监控cup的使用率,实时频率(跟cpu频率不同) 内存使用率 网速监控 C语言实现