Linux 下判断Server 内存是否不足

http://blog.chinaunix.net/uid-22740805-id-333674.html

 

一个客户近段时间一直让我检查他们Oracle Server 内存是否需要吃紧。
因为他一直使用linux 的Top 命令来看系统运行状况的。
下面我来写一下在linux OS 下如何判断系统是否内存吃紧。
我从两个部分来查看如何检查。
第一部分:查看内存使用状况
Linux 下使用Top
[root@itc-test9 ~]# top
top - 17:08:01 up 12 days, 3:48, 2 users, load average: 0.01, 0.01, 0.00
Tasks: 95 total,   1 running, 94 sleeping,   0 stopped,   0 zombie
Cpu(s): 0.0% us, 0.0% sy, 0.0% ni, 99.5% id, 0.5% wa, 0.0% hi, 0.0% si
Mem:   2056000k total, 1963652k used,    92348k free,    59156k buffers
Swap: 4096564k total,      164k used, 4096400k free, 1605276k cached
PID USER      PR NI VIRT RES SHR S %CPU %MEM    TIME+ COMMAND
1 root      16   0 4744 552 460 S 0.0 0.0   0:00.46 init
从Top 显示来看是有1963652K已经使用,只有92348k内存空闲。一直问我是否内存不足了。下面就来解释一下Oracle 在Linux 下如何查看OS 内存是否不足。
但我们从Linux command free 来看:


[oracle@itc-test9 ~]free
total       used       free     shared    buffers     cached
Mem:       2056000    1869596     186404          0      59172    1512236
-/+ buffers/cache:     298188   
1757812
Swap:      4096564        164    4096400

-/+ buffers/cache:     used=298188k =291.2M
                        free=1757812k=1716.6M   约等于2G。
从Free 命令行来看OS 还有1.76G 空间未使用。
需要解释一下Free 和Top 在Linux 下的不同显示问题。
Free命令显示在操作系统中使用和空闲的内存数量。
Top 显示是和Linux 对内存使用的方式关系紧密,linux 尽可能的要求
使 用物理内存来提高Buffer 和Cache 对Disk 的I/O操作。Linux 将尽可能多的将I/O 操作磁盘上的信息保存在内存当中,如果Oracle(其他程序也一样)需要更多的内存空间,Linux 才会将一些内存使用LRU 算法清理出来,如果不需要则继续保持这些数据信息在内存中。所以我们使用Top看到的Memory FreeMem:   2056000k total, 1963652k used,    92348k free很少。
第二部分:查看Swap 的状况:
Swap 空间的使用状况也能分辨出Oracle 服务器内存是否已经吃紧。
先看Swap 大小设定:
RAM Size    Swap Size
1-2G         1.5 倍 RAM
2-8G         1 倍 RAM
>8G          0.75 RAM
基本上每个操做系统(除Windows)都建议Swap 使用上面比例的配置。
但根据个人经验如果Server 的Memory >32G 时,一般都会将Swap 空间设置在10g 以内,甚至更小。
使用Command more /proc/meminfo 或top 来Monitor Swap 的使用状况。
[root@itc-test9 ~]# more /proc/meminfo
MemTotal:      2056000 kB
MemFree:        177268 kB
Buffers:         59292 kB
Cached:        1519188 kB
SwapCached:          4 kB
Active:        1092248 kB
Inactive:       654096 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      2056000 kB
LowFree:        177268 kB
SwapTotal:     4096564 kB
SwapFree:      4096400 kB

[root@itc-test9 ~]# top
top - 17:08:01 up 12 days, 3:48, 2 users, load average: 0.01, 0.01, 0.00
Tasks: 95 total,   1 running, 94 sleeping,   0 stopped,   0 zombie
Cpu(s): 0.0% us, 0.0% sy, 0.0% ni, 99.5% id, 0.5% wa, 0.0% hi, 0.0% si
Mem:   2056000k total, 1963652k used,    92348k free,    59156k buffers
Swap: 4096564k total,      164k used, 4096400k free, 1605276k cached
如果你观察Swap 中的使用量一直在增加,或Swap used 为一个很大的值。那我们基本就能确定在现有的状况下Oracle server 内存出现问题。(我们需要考虑此现象是偶尔发生还是一直出现)
我们需要做:
   增加内存
   减少OS 程序使用内存资源,如Oracle 减少SGA_target 或Memory_Target(11g)
   增大交换空间
你可以通过vmstat 来看当前Swap 活动的状态。
Swap 下面的Si 和So 分别显示Swap 页面交换进来和交换出去。
[root@itc-test9 ~]# vmstat 3 8
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b   swpd   free   buff cache   si   so    bi    bo   in    cs us sy id wa
0 0    164 175468 59292 1520344    0    0     1    21    4    20 0 0 99 0
0 0    164 175532 59292 1520344    0    0     0    48 1038    41 0 0 100 0
0 0    164 175532 59292 1520344    0    0     0    61 1032    35 0 0 99 0
0 0    164 175532 59292 1520344    0    0     0    11 1028    39 0 0 100 0
0 0    164 175532 59292 1520344    0    0     0    15 1024    39 0 0 100 0
使用Vmstat 命令只能看当前的Swap 页面的交换入和交换出。那如何看历史Swap 信息呢。
Linux 下有一个命令可以看,那就是
[root@itc-test9 sa]# cd /var/log/sa
[root@itc-test9 sa]# ls -al |grep 13
drwxr-xr-x   2 root root   4096 Apr 13 00:00 .
-rw-r--r--   1 root root 209328 Apr 13 17:50 sa13
[root@itc-test9 sa]# date    ----今天是4/13 号
Mon Apr 13 17:58:02 CST 2009

[root@itc-test9 sa]# ll |grep 13
-rw-r--r-- 1 root root 209328 Apr 13 17:50 sa13
[root@itc-test9 sa]# sar -W -f sa13
Linux 2.6.9-5.ELsmp (itc-test9)         04/13/2009
12:00:01 AM pswpin/s pswpout/s
12:10:01 AM      0.00      0.00
12:20:01 AM      0.00      0.00
12:30:01 AM      0.00      0.00
12:40:01 AM      0.00      0.00
12:50:01 AM      0.00      0.00
01:00:01 AM      0.00      0.00
01:10:01 AM      0.00      0.00
01:20:01 AM      0.00      0.00
......(中间略去)
...... (中间略去)
03:50:01 PM      0.00      0.00
04:00:01 PM      0.00      0.00
04:10:01 PM      0.00      0.00
04:20:01 PM      0.00      0.00
04:30:01 PM      0.00      0.00
04:40:01 PM      0.00      0.00
04:50:01 PM      0.00      0.00
05:00:01 PM      0.00      0.00
05:10:01 PM      0.00      0.00
05:20:01 PM      0.00      0.00
05:30:01 PM      0.00      0.00
05:40:01 PM      0.00      0.00
05:50:01 PM      0.00      0.00
Average:         0.00      0.00
显示从今天0点到当前的所有Swap 页面交换的数量

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 实现自动巡检Linux文件系统、CPU和内存,并发送邮件的脚本可以通过以下步骤完成: 1. 首先,需要编写一个脚本来获取Linux文件系统的状态。可以使用df命令来获取文件系统使用情况,并将结果保存到一个变量中。 2. 接下来,可以使用top命令来获取CPU和内存的使用情况。可以使用grep命令来过滤出所需的信息,并将结果保存到两个变量中。 3. 然后,可以使用Python的smtplib库来发送邮件。首先需要设置邮件相关的配置信息,包括发件人、收件人、主题和正文等。可以使用Python内置的email库来创建邮件。 4. 最后,将获取到的Linux文件系统、CPU和内存的状态信息作为正文内容添加到邮件中,然后发送邮件。 以下是一个示例脚本的部分代码: ```python import subprocess import smtplib from email.mime.text import MIMEText from email.header import Header # 获取文件系统信息 df_output = subprocess.check_output("df -h", shell=True) filesystem_info = df_output.decode("utf-8") # 获取CPU和内存信息 top_output = subprocess.check_output("top -n 1 -b | grep -E 'CPU|Mem'", shell=True) cpu_info, mem_info = top_output.decode("utf-8").split("\n") # 邮件配置信息 smtp_server = "邮件服务器地址" sender = "发件人邮箱" receiver = "收件人邮箱" subject = "Linux巡检报告" # 创建邮件正文 content = f"文件系统信息:\n{filesystem_info}\n\nCPU信息:\n{cpu_info}\n\n内存信息:\n{mem_info}" # 创建邮件 message = MIMEText(content, "plain", "utf-8") message["From"] = Header(sender, "utf-8") message["To"] = Header(receiver, "utf-8") message["Subject"] = Header(subject, "utf-8") # 发送邮件 try: smtp_obj = smtplib.SMTP() smtp_obj.connect(smtp_server) smtp_obj.sendmail(sender, receiver, message.as_string()) print("邮件发送成功") except smtplib.SMTPException as e: print("邮件发送失败:" + str(e)) ``` 注意,以上代码是简化的示例,需要根据实际情况进行相应的调整和完善,如邮件服务器的具体配置、发送邮件的身份验证等。 ### 回答2: 自动巡检Linux 文件系统、CPU、内存的脚本并发邮件可以通过以下步骤来实现。 首先,我们可以编写一个Shell脚本来执行巡检任务。该脚本可以使用诸如df、top等命令来获取文件系统、CPU和内存的相关信息。 对于文件系统的巡检,我们可以使用df命令来获取磁盘空间利用率、已用空间和可用空间等信息。通过解析df命令的输出并与事先设定的阈值进行比较,我们可以确定是否需要发送告警邮件。 对于CPU和内存的巡检,我们可以使用top命令来获取当前CPU和内存的利用率等信息。通过解析top命令的输出并与设定的阈值进行比较,我们可以判断是否需要发送告警邮件。 在脚本中,我们可以使用邮件发送命令来发送自动巡检结果的报告。可以使用诸如mailx或sendmail等命令来发送邮件。脚本可以将巡检结果生成为邮件正文,然后通过指定的邮件服务器和收件人地址等信息进行发送。 最后,我们可以将该脚本设置为定时任务,使其在固定的时间间隔内自动执行。可以使用crontab命令将该脚本添加到定时任务中,以便在每次巡检时自动执行脚本。 通过以上步骤,我们可以实现一个自动巡检Linux文件系统、CPU和内存的脚本,并将结果通过邮件发送出来。这样可以方便地监控系统状态并及时发现问题,以便采取相应的措施。 ### 回答3: 要实现自动巡检Linux文件系统、CPU和内存的脚本并能发送邮件,可以采用以下步骤: 1. 导入所需的Python库,如os、subprocess和smtplib等。 2. 定义一个函数,用于检查文件系统使用情况。可以使用df命令获取文件系统的使用情况信息,然后将数据进行解析处理,判断磁盘空间使用率是否超过设定的阈值。 3. 定义一个函数,用于检查CPU使用情况。可以使用top、psutil或/proc/stat等工具获取CPU的使用率信息,根据设定的阈值进行判断。 4. 定义一个函数,用于检查内存使用情况。可以使用free命令获取内存使用情况信息,然后将数据进行解析处理,判断内存使用率是否超过设定的阈值。 5. 定义一个函数,用于发送邮件。需要指定SMTP服务器地址、发件人和收件人的邮箱地址、邮件主题和内容等信息,通过smtplib库的SMTP类实现邮件的发送。 6. 在主函数中,依次调用文件系统、CPU和内存检查的函数,根据检查结果决定是否发送邮件。 7. 可以设置一个定时任务,比如使用cron来定时执行这个脚本,以实现自动巡检。 值得注意的是,以上只是一个简单的框架,具体实现需要根据具体需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值