Linux 系统由若干主要物理组件组成,如CPU、内存、网卡和存储设备。要有效地管理Linux 环境,您应该能够以合理的精度测量这些资源的 各种指标—每个组件处理多少资源、是否存在瓶颈等。下面我们介绍下linux资源监控有关的一些命令。

查看系统发行版

root@cf0c6032ba2f:/# lsb_release -a

No LSB modules are available.

Distributor ID: Ubuntu

Description: Ubuntu 14.04.5 LTS

Release: 14.04

Codename: trusty

top(cpu)

Cpu(s)这一行提供了当前CPU运行情况的信息:

Cpu(s): 11.4%us, 29.6%sy, 0.0%ni, 58.3%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st

us:用户CPU时间 运行非优雅的用户进程所占CPU时间的百分比(优雅,英文“nicing”,是指一个进程允许你根据其他进程更改优先级)。

sy:系统CPU时间 运行内核和内核进程所占CPU时间的百分比。

ni:优雅CPU时间 如果更改过一些进程的优先级,这个指标能够告诉你它们所占CPU时间的百分比。

id:CPU空闲时间 这是你希望具备很高数值的度量指标中的一个。它代表了CPU的空闲时间比。如果系统运行缓慢,但是这个指标特别高,那么你就可以确定问题的原因不是高CPU负载。

wa:I/O等待 这个数字代表了CPU时间用在等待执行I/O操作所占的百分比。当你解决运行缓慢的系统问题的时候,这是一个非常有价值的度量指标,因为如果这个数值很低,那么就能轻松排除磁盘或者网络I/O的问题。

hi:硬件中断 CPU用于处理硬件中断所占时间的百分比。

si:软件中断 CPU用在处理软件中断所占时间的百分比。

st:流逝的时间 如果你正在运行虚拟机,这个度量指标会告诉你虚拟机中执行的其他任务所占CPU时间的百分比。

查看cpu个数

判断Linux服务器CPU情况的依据如下:

具有相同core id的CPU是同一个core的超线程。

具有相同physical id的CPU是同一个CPU封装的线程或核心。

显示物理CPU个数的命令如下所示:

cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

显示每个物理CPU中core的个数(即核数)的命令如下所示:cat /proc/cpuinfo | grep "cpu cores" | uniq

命令结果显示如下所示: cpu cores : 1

显示逻辑CPU的个数的命令如下所示:cat /proc/cpuinfo | grep "processor" | wc -l

命令结果显示如下所示: 4 其实大家从这里就可以看出来,按理说应有如下等式: 物理CPU个数×核数=逻辑CPU的个数 如果不相等的话,则表示你的服务器CPU支持超线程技术。我们在配置服务器的应用时,应以服务器的逻辑CPU个数为准。

uptime(平均负载)

有时候我们会觉得系统响应速度很慢,但是又找不到原因,这时就要查平均负载了,看它是否有大量的进程在排队等待。特定时间间隔内运行队列中的平均进程数可以反映系统的繁忙程度,所以我们通常会在自己的网站或系统变慢时第一时间查系统的负载,即CPU的平均负载。究竟应该如何查看平均负载呢?最简单的命令是uptime,如下所示:

uptime

命令显示结果如下:11:31:11 up 11 days, 19:01, 2 users, load average: 0.02, 0.01, 0.00

目前的主流服务器都是双四核,有相当强悍的CPU,提供一般的应用服务时,不必担心Linux系统的负载。

这里需要注意的是load average的输出值,这三个值的大小一般不能大于系统逻辑CPU的个数,例如,本输出中系统有4个逻辑CPU,如果load average的三个值长期大于4,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于4时,不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲的,比如本例中的输出,CPU是比较空闲的。

这时候可以结合vmstat命令来判断我们的系统是否过于繁忙,如果确定很繁忙,就要考虑是否更换服务器或增加CPU的个数了。总结如下: 如果r经常大于3或4,且id经常少于50,则表示CPU的负荷很重。

top(mem)Mem: 1024176k total, 997408k used, 26768k free, 85520k buffers

Swap: 1004052k total, 4360k used, 999692k free, 286040k cached

第1行告诉我们有多少物理内存可用、占用了多少内存、空闲多少内存以及缓存了多少内存。第2行为我们提供了相似的信息,交换存储以及Linux文件缓存使用了多少RAM。

想要找出进程到底真正使用了多少RAM,你必须刨除RAM中的文件缓存。正如你所看到的示例代码一样,在已用的997408KB的RAM中,有286040KB的RAM被文件缓存占用,所以这就是说实际上仅使用了711368KB的RAM。 辨别是否耗尽了RAM的一个好方法是查看文件缓存。

如果实际用的内存减去文件缓存的值很大,同时交换存储的值也很高,很可能的确有内存问题。

free -m(内存)

显示的是当前内存的使用情况,m的意思是以M个字节来显示内容,此命令只在Linux系统下有效,在FreeBSD下是没有此命令的。命令显示结果如下所示:total  used  free sharedbuffers cached

Mem: 3949  1397  2551 0268917

-/+ buffers/cache:211  3737

Swap:8001 0  8001

上述结果中各个参数的详细说明如下:

total:内存总数。

used:已经使用的内存数。

free:空闲的内存数。

shared:多个进程共享的内存总额。

buffers buffer cache和cached page cache:磁盘缓存的大小。

-buffers/cache:(已用)的内存数,即used-buffers-cached。

+buffers/cache:(可用)的内存数,即free + buffers + cached。 由此得出结论,可用内存的计算公式为可用内存=free+buffers+cached 即 2551MB+268MB+917MB=3737MB 注意 上面等式两边的数值并不相等,但这个没关系,-m参数其实是以整数数值来取舍的。大家如果对这个运算结果有怀疑,可以尝试不带-m参数来观看free命令显示的结果,这样就会一目了然了。

可见-buffers/cache反映的是被程序实实在在占用的内存,而+buffers/cache反映的是可以挪用的内存总数。vmstat(io)

vmstat是一个相当全面的性能分析工具,通过它可以观察系统的进程状态、内存使用情况、虚拟内存的使用情况、磁盘的I/O、中断、上下文切换、CPU的使用情况等性能信息,建议熟练掌握此命令。

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

r b  swpd  free  buff cache  si  sobibo  incs us sy id wa

2 0 0 519024 74732 460656800 3 9510 27 5 68 0 2 0 0 519664 74732 460656800 0 0 1847 1244 20 17 63 0 1 0 0 517296 74732 460656800 0  284 2092 1617 37 17 47 0 3 0 0 515440 74732 460656800 0  164 1620  718 26 17 57 0

其中:

(1)procs r:等待运行的进程数。 b:处于非中断睡眠状态的进程数。

(2)memory swpd:虚拟内存使用情况(单位:KB)。 free:空闲的内存(单位:KB)。 buff:被用来作为缓存的内存数量(单位:KB)。

(3)swap si:从磁盘交换到内存的交换页数量(单位:KB/s)。 so:从内存交换到磁盘的交换页数量(单位:KB/s)。

(4)io bi:发送到块设备的块数(单位:块/秒)。 bo:从块设备接收到的块数(单位:块/秒)。

(5)system in:每秒的中断数,包括时钟中断。 cs:每秒的环境(上下文)切换次数。 (6)cpu 按CPU的总使用百分比来显示。 us:CPU使用时间。 sy:CPU系统使用时间。 id:闲置时间。

标准情况下r和b值应该为:r<5,b≈0。 如果user%+sys%<70%则表示系统性能较好,如果user%+sys%>=85%或以上,这表示系统性能比较糟糕,这时就要对系统进行全方面检查了。其中: user%表示CPU处在用户模式下的时间百分比。 sys%表示CPU处在系统模式下的时间百分比。

ps auxf(进程)

要查看系统中用户正在运行的所有进程,可以在ps命令后面使用以下选项:

a(表示所有用户)

u(以面向用户的格式显示,或显示拥有每个进程的用户)

x(没有控制tty或终端屏幕的进程,“显示每个进程”的另一种方法)ps aux

请注意"ps -aux"不同于"ps aux"。POSIX和UNIX的标准要求"ps -aux"打印用户名为"x"的用户的所有进程,以及打印所有将由-a选项选择的过程。如果用户名为"x"不存在,ps的将会解释为"ps aux",而且会打印一个警告。这种行为是为了帮助转换旧脚本和习惯。它是脆弱的,即将更改,因此不应依赖。

要查看进程树,除了使用上一节用过的a、u和x选项,还要加上个f(其名称源于ASCII art forest)选项。ps auxf

ps -ef(进程)

ps aux是用BSD格式来显示结果.ps -ef是用全格式的System V格式,显示出来就是带全路径的进程名.

一个影响使用的区别是aux会截断command列,而-ef不会。因此当需要结合grep的时候,优先选择-ef命令,避免误判

netstat(网络)

netstat命令的功能是显示网络连接、路由表和网络接口的信息,可以让用户得知目前都有哪些网络连接正在运作。 下面是它的重要参数,以及详细的说明:

-A:显示任何关联的协议控制块的地址。主要用于调试。

-a:显示所有套接字的状态。在一般情况下不显示与服务器进程相关联的套接字。

-i:显示自动配置接口的状态。那些在系统初始引导后配置的接口状态不在输出之列。

-m:打印网络存储器的使用情况。

-n:打印实际地址,而不是对地址的解释或显示主机、网络名之类的符号。

-r:打印路由选择表。

-f address:family会对于给出名字的地址簇打印统计数字和控制块信息。到目前为止,它唯一支持的地址簇是inet。

-I interface:表示只打印给出名字的接口状态。

-p protocol-name:表示只打印给出名字的协议的统计数字和协议控制块信息。

-s:打印每个协议的统计数字。

-t:表示在输出显示中用时间信息代替队列长度信息。

我们用得最多的,也是最习惯的参数有两个,即netstat-an,如下所示:netstat -an | grep –v unix

lsof(文件)

lsof(list open files)是一个列出当前系统打开文件的工具。在UNIX环境下,任何事物都是以文件的形式存在的,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以像传输控制协议(TCP)和用户数据报协议(UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符都会为应用程序与基础操作系统之间的交互提供通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序的信息,因此通过lsof工具查看这个列表对系统监测,以及排错非常有帮助。顺便提一下,这工具首先出现在UNIX系统中,后才移植到Linux平台下。

工作中用得最多的是-i参数,可以用它来查看特定端口的情况,比如,我可以用lsof -i:22查看22端口是由哪些程序占用的。

fdisk -l(硬盘分区)

查看硬盘及分区信息,如下所示: fdisk –l 命令显示结果如下:

Disk /dev/sda: 160.0 GB, 160040803840 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 512 = 8225280 bytes   Device Boot Start End Blocks  Id System /dev/sda1    1 13 104391  83 Linux / /dev/sda2 14320025599577+ 83 Linux /dev/sda332013582 3068415  82 Linux swap / Solaris /dev/sda43583  19457  127515937+  5 Extended /dev/sda53583  19457  127515906  83 Linux

以上结果表明这是一块160GB的服务器硬盘。

df(硬盘空间)

检查文件系统的磁盘空间占用情况,命令如下所示:

df –h 命令显示结果如下:

FilesystemSize Used Avail Use% Mounted on /dev/sda2 24G 5.9G  17G 26% /

/dev/sda5 118G 8.8G 103G  8% /data

/dev/sda1 99M  20M  75M 21% /boot

tmpfs 859M 0 859M  0% /dev/shm

du(目录大小)

查看Linux系统中某目录的大小,这在工作中经常会遇到。可以使用如下命令查看:du -sh 目录名

例如du -sh /data 命令显示结果如下所示: 8.6G /data/ 检查是否有分区使用率(Use%)过高(比如超过90%),如发现某个分区空间接近用完,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录,然后按照从大到小的顺序,正好可以找出系统中占用最多空间的前十个文件或目录:du -sh * | sort -hr | head -n 10

doc

ps aux 和ps -aux和 ps -ef的选择

相关标签:Linux

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

linux 系统监控 php,Linux系统资源监控命令简介相关推荐

  1. 使用shell脚本对Linux系统和进程资源进行监控

    今天发现一个网站,快课网,感觉还不错,里面有编程,面试,算法等等相关内容. 链接如下:http://www.cricode.com/ 首页便看到这篇文章,正好对Linux和shell等持续关注,转载学 ...

  2. 在linux中at 调度出错,linux系统中的调度延迟任务:at 命令

    linux系统中的调度延迟任务:at 命令 主要概念 at命令可以使命令稍后运行 batch命令可以让命令在机器负载较低的情况下运行 可以直接进入命令,或者以脚本形式提交命令 作业中的标准输出用邮件发 ...

  3. linux系统中如何查看日志 (常用命令)

    linux系统中如何查看日志 (常用命令) cat  tail -f 日 志 文 件 说    明  /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用 ...

  4. linux 关闭scp服务器,Linux系统如何关闭scp和sftp命令

    Linux系统如何关闭scp和sftp命令. sftp介绍 sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp ...

  5. 嵌入式Linux系统编程学习之二常用命令

    嵌入式Linux系统编程学习之二常用命令 文章目录 嵌入式Linux系统编程学习之二常用命令 前言 一.常用命令 1.su(用户切换) 2.useradd(添加用户) 3.passwd(修改密码) 4 ...

  6. php执行who命令,Linux_在Linux系统中使用who和whoami命令获取用户信息,who用法:who [选项]... [ 文件 | - phpStudy...

    在Linux系统中使用who和whoami命令获取用户信息 who用法:who [选项]... [ 文件 | 参数1 参数2 ] 显示当前已登录的用户信息. -a, --all             ...

  7. linux清除文件后df还是满的,Linux系统下用du和df命令清除大文件的方法

    很多用户表示,Linux系统中发现/home目录下剩余空间不足的时候,可以使用du和df命令来对找到大文件,并且对它们进行删除,从而腾出足够的空间.但是,如何用du和df命令清除大文件呢?下面,U大侠 ...

  8. linux系统如何为软件升级,在Linux系统中怎样才能使用一个命令升级所有软件?...

    今天小编要跟大家分享的有关Linux的文章中,是关于在Linux系统中怎样才能使用一个命令升级所有软件,熟悉Linux系统的小伙伴都知道,让我们的 Linux 系统保持最新状态会用到多种包管理器.比如 ...

  9. linux系统下 压缩和解压缩文件命令

    linux系统下 压缩和解压缩文件命令 1.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 2.把/home ...

  10. linux 查看磁盘信息命令行,Linux系统中查看磁盘空间信息的命令

    Linux系统中磁盘空间的信息我们要怎么查看呢?下面由学习啦小编为大家整理了Linux系统中查看磁盘空间信息的命令,希望对大家有帮助! Linux系统中查看磁盘空间信息的命令:一.df -lh 命令 ...

最新文章

  1. matlab中-psi_matlab输出论文仿真图
  2. Android中的Selector的用法
  3. [Enterprise Library]Configuration类设计分析
  4. Spring Initializr创建项目,利用阿里云URL解决Initialization failed for https://start.spring.io Please check URL
  5. 《数据库原理与应用》(第三版)第9章 事务与并发控制 基础 习题参考答案
  6. 深入理解 Linux的 I/O 系统
  7. HDU - 5394 Trie in Tina Town(回文自动机+字典树)
  8. MySQL表联合查询 理论基础:外键、操作关联表(一)
  9. 浅谈Oracle中物理结构(数据文件等。。。)与逻辑结构(表空间等。。。。。)
  10. AI未成解药 流利说2019年净亏5.75亿 Q4付费用户再降20万
  11. mysql1045错误解读_谈谈MYSQL ERROR 1045 错误的解决办法!
  12. 北大青鸟java+web_java web ui开发
  13. 阿里云部署flask
  14. Eclipse3.5的使用配置
  15. 连续竞价java_Java 方法method
  16. 2021-06-23元素的排列,浮动和display
  17. 用matlab如何画六边形,matlab怎样直接画出六边形
  18. 第十七届全国大学生智能汽车竞赛全国总决赛参赛队伍奖项公告
  19. android上查看浏览器内核版本号,各种浏览器的userAgent及如何使用JS来检测游览器类型,或android是什么版本号...
  20. linux下解压iso文件

热门文章

  1. C篇(一) 用Codeblocks建立一个C的工程
  2. 虚拟化方面包含了主机、存储和网络
  3. 制造内核崩溃并使用crash分析内核崩溃产生的vmcore文件
  4. webpack文章(持续更新)
  5. Bitbucket Pipelines在Atlassian的Bitbucket云上提供持续交付功能
  6. shell基础二:查找技巧,find及xargs的使用
  7. saltstack实战-6
  8. Win Srv 2012 R2 RDS移动RDS客户端
  9. Oracle中的NULL(一、问题引入)
  10. CSP认证201409-4 最优配餐[C++题解]:bfs、多源bfs、最短路、图论