一般情况下 , 如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用 。
r 表示运行队列(就是说多少个进程真的分配到CPU) , 我测试的服务器目前CPU比较空闲 , 没什么程序在跑 , 当这个值超过了CPU数目 , 就会出现CPU瓶颈了 。
这个也和top的负载有关系 , 一般负载超过了3就比较高 , 超过了5就高 , 超过了10就不正常了 , 服务器的状态很危险 。
top的负载类似每秒的运行队列 。如果运行队列过大 , 表示你的CPU很繁忙 , 一般会造成CPU使用率很高 。
5. 常见性能问题分析【Linux内存占用常用的几个分析方法,你确定都知道?】IO/CPU/men连锁反应
1.free急剧下降2.buff和cache被回收下降 , 但也无济于事3.依旧需要使用大量swap交换分区swpd4.等待进程数 , b增多5.读写IO , bi bo增多6.si so大于0开始从硬盘中读取7.cpu等待时间用于 IO等待 , wa增加
内存不足
1.开始使用swpd , swpd不为02.si so大于0开始从硬盘中读取
io瓶颈
1.读写IO , bi bo增多超过20002.cpu等待时间用于 IO等待 , wa增加 超过203.sy 系统调用时间长 , IO操作频繁会导致增加 >30%4.wa io等待时间长iowait% <20%良好iowait% <35%一般iowait% >50%5.进一步使用IOStat观察
CPU瓶颈:load,vmstat中r列
1.反应为CPU队列长度2.一段时间内 , CPU正在处理和等待CPU处理的进程数之和 , 直接反应了CPU的使用和申请情况 。3.理想的load average:核数*CPU数*0.7CPU个数:grep 'physical id' /proc/cpuinfo | sort -u核数:grep 'core id' /proc/cpuinfo | sort -u | wc -l4.超过这个值就说明已经是CPU瓶颈了
三、/proc/meminfo用途: 用于从/proc文件系统中提取与内存相关的信息 。这些文件包含有 系统和内核的内部信息 。其实 free 命令中的信息都来自于 /proc/meminfo 文件 。/proc/meminfo 文件包含了更多更原始的信息 , 只是看起来不太直观 。
1. 查看方法:cat /proc/meminfo
2. 实例及信息解释peng@ubuntu:~$ cat /proc/meminfoMemTotal:2017504 kB //所有可用的内存大小 , 物理内存减去预留位和内核使用 。系统从加电开始到引导完成 , firmware/BIOS要预留一些内存 , 内核本身要占用一些内存 , 最后剩下可供内核支配的内存就是MemTotal 。这个值在系统运行期间一般是固定不变的 , 重启会改变 。MemFree:511052 kB //表示系统尚未使用的内存 。MemAvailable:640336 kB //真正的系统可用内存 , 系统中有些内存虽然已被使用但是可以回收的 , 比如cache/buffer、slab都有一部分可以回收 , 所以这部分可回收的内存加上MemFree才是系统可用的内存Buffers:114348 kB //用来给块设备做缓存的内存 , (文件系统的 metadata、pages)Cached:162264 kB //分配给文件缓冲区的内存,例如vi一个文件 , 就会将未保存的内容写到该缓冲区SwapCached:3032 kB //被高速缓冲存储用的交换空间(硬盘的swap)的大小Active:555484 kB //经常使用的高速缓冲存储器页面文件大小Inactive:295984 kB //不经常使用的高速缓冲存储器文件大小Active(anon):381020 kB //活跃的匿名内存Inactive(anon):244068 kB //不活跃的匿名内存Active(file):174464 kB //活跃的文件使用内存Inactive(file):51916 kB //不活跃的文件使用内存Unevictable:48 kB //不能被释放的内存页Mlocked:48 kB //系统调用 mlock SwapTotal:998396 kB //交换空间总内存SwapFree:843916 kB //交换空间空闲内存Dirty:128 kB //等待被写回到磁盘的Writeback:0 kB //正在被写回的AnonPages:572776 kB //未映射页的内存/映射到用户空间的非文件页表大小Mapped:119816 kB //映射文件内存Shmem:50212 kB //已经被分配的共享内存Slab:113700 kB//内核数据结构缓存SReclaimable:68652 kB //可收回slab内存SUnreclaim:45048 kB //不可收回slab内存KernelStack:8812 kB //内核消耗的内存PageTables:27428 kB //管理内存分页的索引表的大小NFS_Unstable:0 kB //不稳定页表的大小Bounce:0 kB //在低端内存中分配一个临时buffer作为跳转 , 把位于高端内存的缓存数据复制到此处消耗的内存WritebackTmp:0 kB //FUSE用于临时写回缓冲区的内存CommitLimit:2007148 kB //系统实际可分配内存Committed_AS:3567280 kB //系统当前已分配的内存VmallocTotal:34359738367 kB //预留的虚拟内存总量VmallocUsed:0 kB //已经被使用的虚拟内存VmallocChunk:0 kB //可分配的最大的逻辑连续的虚拟内存HardwareCorrupted:0 kB //表示“中毒页面”中的内存量即has failed的内存(通常由ECC标记). ECC代表“纠错码”. ECC memory能够纠正小错误并检测较大错误;在具有非ECC内存的典型PC上,内存错误未被检测到.如果使用ECC检测到无法纠正的错误(在内存或缓存中,具体取决于系统的硬件支持),则Linux内核会将相应的页面标记为中毒.AnonHugePages:0 kB //匿名大页【/proc/meminfo的AnonHugePages==所有进程的/proc/<pid>/smaps中AnonHugePages之和】ShmemHugePages:0 kB//用于共享内存的大页ShmemPmdMapped:0 kBCmaTotal:0 kB //连续内存区管理总量CmaFree:0 kB //连续内存区管理空闲量HugePages_Total:0//预留HugePages的总个数HugePages_Free:0//池中尚未分配的 HugePages 数量 , 真正空闲的页数等于HugePages_Free - HugePages_RsvdHugePages_Rsvd:0//表示池中已经被应用程序分配但尚未使用的 HugePages 数量HugePages_Surp:0//这个值得意思是当开始配置了20个大页 , 现在修改配置为16 , 那么这个参数就会显示为4 , 一般不修改配置 , 这个值都是0Hugepagesize:2048 kB //大内存页的size//指直接映射(direct mapping)的内存大小 , 从代码上来看 , 值记录管理页表占用的内存,就是描述线性映射空间中 , 有多个空间分别使用了2M/4K/1G页映射DirectMap4k:96128 kBDirectMap2M:2000896 kB DirectMap1G:0 kB
推荐阅读
- Windows|Win10最佳免费杀软Defender“翻车”了!用户遭殃:内存占用高、黑屏
- Linux用户及权限管理
- 记一次 .NET 某招聘网后端服务 内存暴涨分析
- 新手必须掌握的linux命令
- linux内核--自旋锁的理解
- 使用MobaXterm管理远程Linux服务器
- linux smb漏洞?SMB协议漏洞
- 内存页面置换
- Linux 系统将不再默认启用 AMD SME
- linux防火墙iptables常用操作笔记