Maison > Tutoriel système > Linux > le corps du texte

Combien de méthodes connaissez-vous sur l'analyse de l'utilisation de la mémoire Linux ?

WBOY
Libérer: 2024-02-13 18:24:16
avant
710 Les gens l'ont consulté

0.Introduction :

La mémoire système est un élément indispensable du système matériel. La vérification régulière du fonctionnement des ressources de mémoire système peut nous aider à découvrir rapidement s'il existe des occupations anormales des ressources de mémoire et à garantir un fonctionnement commercial stable.

Par exemple : vérifier régulièrement l'utilisation de la mémoire du serveur du site Web de l'entreprise peut garantir si les ressources du serveur sont suffisantes, ou si vous constatez que la mémoire du serveur est anormalement occupée, vous pouvez le résoudre à temps pour éviter le problème de l'impossibilité d'accéder. le site Web ou un accès lent en raison d’une mémoire insuffisante.

Par conséquent, il est très important pour les administrateurs Linux de pouvoir vérifier habilement l'état de santé de la mémoire sous les systèmes Linux dans leur travail quotidien !

Il n'est pas difficile de vérifier l'état de fonctionnement de la mémoire, mais comment le vérifier correctement pour différentes situations ?

Kuiyijun a compilé plusieurs méthodes très pratiques pour vérifier la mémoire Linux :

  • 1. commande gratuite
  • 2. Commande vmstat
  • 3. Commande/proc/meminfo
  • 4. commande supérieure
  • 5. commande htop
  • 6. Afficher les informations sur la mémoire du processus

Image de présentation de la mémoire Linux

Combien de méthodes connaissez-vous sur lanalyse de lutilisation de la mémoire Linux ?

Ce diagramme décrit joliment les détails de l'utilisation et de l'allocation de la mémoire du système d'exploitation. Il est recommandé à chacun d'utiliser cette image pour apprendre et comprendre certains concepts de la mémoire.

1. commande gratuite

La commande free peut afficher la quantité de mémoire inutilisée et utilisée dans le système actuel, et peut également afficher la mémoire tampon utilisée par le noyau.

1. Syntaxe de commande gratuite :

free [options]
Copier après la connexion

options de commande gratuites :

-b # 以Byte为单位显示内存使用情况;
-k # 以KB为单位显示内存使用情况;
-m # 以MB为单位显示内存使用情况;
-g # 以GB为单位显示内存使用情况。 
-o # 不显示缓冲区调节列;
-s # 持续观察内存使用状况;
-t # 显示内存总和列;
-V # 显示版本信息。
Copier après la connexion

2. Exemple de commande gratuite

free -t    # 以总和的形式显示内存的使用信息
free -h -s 10 # 周期性的查询内存使用信息,每10s 执行一次命令

free -h -c 10 #输出10次
  在版本 v3.2.8,就是输出一次!需要配合 -s 使用。
  在版本 v3.3.10,不加-s,就默认1秒输出一次。
free -V #查看版本号
Copier après la connexion

v3.2.8

Combien de méthodes connaissez-vous sur lanalyse de lutilisation de la mémoire Linux ?

v3.3.10

Combien de méthodes connaissez-vous sur lanalyse de lutilisation de la mémoire Linux ?

Expliquons d'abord le contenu de la sortie :

La La La colonne
Contenu Signification
Memligne (la deuxième ligne) correspond à l'utilisation de la mémoire
Échangeligne (la troisième ligne) est l'utilisation de l'espace d'échange
total Mémoire physique totale disponible. Généralement, la mémoire physique totale, à l'exclusion de la mémoire réservée et de la mémoire occupée par le système d'exploitation lui-même, correspond à la taille de mémoire que le système d'exploitation peut contrôler. C'est la même chose dans les versions 3.2.8 et 3.3.10. Cette valeur est la valeur de MemTotal dans /proc/meminfo.
utilisé Les colonnes indiquent la mémoire physique et l'espace d'échange qui ont été utilisés. Dans la version 3.2.8, cette valeur est dérivée de (total – gratuit). On peut dire que le système a été alloué par le système, mais il n'est pas nécessairement réellement utilisé. Son espace peut être récupéré et réaffecté. Dans la version 3.3.10, cette valeur est dérivée de (total – libre – cache – tampons) et correspond à la mémoire réelle actuellement utilisée.
gratuit La mémoire physique qui n'est pas utilisée par le système. Cette valeur est la valeur de MemFree dans /proc/meminfo
partagé Espace mémoire partagé. Cette valeur est la valeur de Shmem dans /proc/meminfo
buff/cache indique la taille de la mémoire physique utilisée par le tampon et le cache
disponible Article dans la v3.3.10. Il semble que cette valeur soit de la mémoire utilisable, mais (disponible + utilisée)
-/+ tampons/cache v3.2.8 a cette ligne, pas la v3.3.10. Parmi eux, l’élément utilisé est la valeur de (used – buffers – cached), c’est-à-dire la valeur de (total – free – buffers – cached), qui est la valeur de la mémoire réellement utilisée. free Cet élément est la valeur de (free + buffers + cached), qui est la valeur de la mémoire réelle inutilisée. Personnellement, je pense qu'il y a -/+ buffers/cache, cette colonne m'est assez familière. . Cependant, la nouvelle version v3.3.10 est plus claire quant à son utilisation. Je crois qu'il y a beaucoup de gens comme moi qui ont été un peu confus lorsqu'ils ont vu pour la première fois que la version 3.2.8 prenait autant de mémoire.

二、vmstat 指令

vmstat命令是最常见的Linux/Unix监控工具,用于查看系统的内存存储信息,是一个报告虚拟内存统计信息的小工具,属于sysstat包。

vmstat 命令报告包括:进程、内存、分页、阻塞 IO、中断、磁盘、CPU

可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

1. 命令格式:

vmstat -s(参数)
Copier après la connexion

2. 举例

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

 root@local:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 3498472 315836 3819540    0    0     0     1    2    0  0  0 100  0
Copier après la connexion

2表示每个两秒采集一次服务器状态,1表示只采集一次。

实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:Combien de méthodes connaissez-vous sur lanalyse de lutilisation de la mémoire Linux ?

这表示vmstat每2秒采集数据,按下ctrl + c结束程序,这里采集了3次数据我就结束了程序。

Lorsque
Catégorie Projet signification Instructions
Procs****(Processus) r Nombre de tâches en attente d'exécution Affiche le nombre de tâches en cours d'exécution et en attente de ressources CPU. Lorsque cette valeur dépasse le nombre de processeurs, un goulot d'étranglement du processeur se produit.
B 等待IO的进程数量
Memory(内存) swpd 正在使用虚拟的内存大小,单位k
free 空闲内存大小
buff 已用的buff大小,对块设备的读写进行缓冲
cache 已用的cache大小,文件系统的cache
inact 非活跃内存大小,即被标明可回收的内存,区别于free和active 具体含义见:概念补充(当使用-a选项时显示)
active 活跃的内存大小 具体含义见:概念补充(当使用-a选项时显示)
Swap si 每秒从交换区写入内存的大小(单位:kb/s)
so 每秒从内存写到交换区的大小
IO bi 每秒读取的块数(读磁盘) 块设备每秒接收的块数量,单位是block,这里的块设备是指系统上所有的磁盘和其他块设备,现在的Linux版本块的大小为1024bytes
bo 每秒写入的块数(写磁盘) 块设备每秒发送的块数量,单位是block
system in 每秒中断数,包括时钟中断 这两个值越大,会看到由内核消耗的cpu时间sy会越多 秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目
cs 每秒上下文切换数
CPU****(以百分比表示) us 用户进程执行消耗cpu时间(user time) us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了
sy Les processus système consomment du temps CPU (temps système) Lorsque la valeur de sys est trop élevée, cela signifie que le noyau du système consomme beaucoup de ressources CPU. Ce n'est pas une performance anodine, et nous devrions en vérifier la raison. La valeur de référence de us + sy ici est de 80 %. Si us + sy est supérieure à 80 %, cela signifie que le processeur est peut-être insuffisant
Id Temps d'inactivité (y compris le temps d'attente IO) D'une manière générale, nous+sy+id=100
wa En attente de l'heure IOwa est trop élevé, cela signifie que l'attente d'E/S est importante. Cela peut être dû à un grand nombre d'accès aléatoires au disque, ou à un goulot d'étranglement dans la bande passante du disque.

3. 常见问题处理

常见问题及解决方法

  1. 如果r经常大于4,且id经常少于40,表示cpu的负荷很重。
  2. 如果pi,po长期不等于0,表示内存不足。
  3. 如果disk经常不等于0,且在b中的队列大于3,表示io性能不好。
  • 1.如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU。
  • 2.如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢。
  • 3.如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着CPU资源的短缺。

当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些sql语句不合理等等都会造成这样的现象.

4. 内存问题现象:

内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.

解决办法:

  • 1.调节applications & servers使得对内存和cache的使用更加有效.
  • 2.增加系统的内存.
  • 3.Implement priority paging in s in pre solaris 8 versions by adding line “set priority paging=1” in /etc/system. Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.

关于内存的使用情况还可以结ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.

一般情况下,如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用。

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。

这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。

top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

5. 常见性能问题分析

IO/CPU/men连锁反应

1.free急剧下降
2.buff和cache被回收下降,但也无济于事
3.依旧需要使用大量swap交换分区swpd
4.等待进程数,b增多
5.读写IO,bi bo增多
6.si so大于0开始从硬盘中读取
7.cpu等待时间用于 IO等待,wa增加
Copier après la connexion

内存不足

1.开始使用swpd,swpd不为0
2.si so大于0开始从硬盘中读取
Copier après la connexion

io瓶颈

1.读写IO,bi bo增多超过2000
2.cpu等待时间用于 IO等待,wa增加 超过20
3.sy 系统调用时间长,IO操作频繁会导致增加 >30%
4.wa io等待时间长
    iowait% 50%
5.进一步使用iostat观察
Copier après la connexion

CPU瓶颈:load,vmstat中r列

    1.反应为CPU队列长度
    2.一段时间内,CPU正在处理和等待CPU处理的进程数之和,直接反应了CPU的使用和申请情况。
    3.理想的load average:核数*CPU数*0.7
        CPU个数:grep 'physical id' /proc/cpuinfo | sort -u
        核数:grep 'core id' /proc/cpuinfo | sort -u | wc -l
    4.超过这个值就说明已经是CPU瓶颈了
Copier après la connexion

三、/proc/meminfo

用途:用于从/proc文件系统中提取与内存相关的信息。这些文件包含有 系统和内核的内部信息。其实 free 命令中的信息都来自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只是看起来不太直观。

1. 查看方法:

cat /proc/meminfo
Copier après la connexion

2. 实例及信息解释

peng@ubuntu:~$ cat /proc/meminfo
MemTotal:        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//smaps中AnonHugePages之和】
ShmemHugePages:        0 kB  //用于共享内存的大页
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB //连续内存区管理总量
CmaFree:               0 kB //连续内存区管理空闲量
HugePages_Total:       0    //预留HugePages的总个数
HugePages_Free:        0    //池中尚未分配的 HugePages 数量,
真正空闲的页数等于HugePages_Free - HugePages_Rsvd
HugePages_Rsvd:        0    //表示池中已经被应用程序分配但尚未使用的 HugePages 数量
HugePages_Surp:        0    //这个值得意思是当开始配置了20个大页,现在修改配置为16,那么这个参数就会显示为4,一般不修改配置,这个值都是0
Hugepagesize:       2048 kB //大内存页的size
//指直接映射(direct mapping)的内存大小,从代码上来看,值记录管理页表占用的内存,就是描述线性映射空间中,有多个空间分别使用了2M/4K/1G页映射
DirectMap4k:       96128 kB
DirectMap2M:     2000896 kB 
DirectMap1G:           0 kB
Copier après la connexion

  1. 注意这个文件显示的单位是kB而不是KB,1kB=1000B,但是实际上应该是KB,1KB=1024B
  2. 还可以使用命令 less /proc/meminfo 直接读取该文件。通过使用 less 命令,可以在长长的输出中向上和向下滚动,找到你需要的内容。

从中我们可以很清晰明了的看出内存中的各种指标情况,例如 MemFree的空闲内存和SwapFree中的交换内存。

3. 代码实例

负责输出/proc/meminfo的源代码是:

fs/proc/meminfo.c : meminfo_proc_show()
static int meminfo_proc_show(struct seq_file *m, void *v)
{
 struct sysinfo i;
 unsigned long committed;
 long cached;
 long available;
 unsigned long pages[NR_LRU_LISTS];
 int lru;
 
 si_meminfo(&i);
 si_swapinfo(&i);
 committed = percpu_counter_read_positive(&vm_committed_as);
 
 cached = global_node_page_state(NR_FILE_PAGES) -
   total_swapcache_pages() - i.bufferram;
 if (cached for (lru = LRU_BASE; lru "MemTotal:       ", i.totalram);
 show_val_kb(m, "MemFree:        ", i.freeram);
 show_val_kb(m, "MemAvailable:   ", available);
 show_val_kb(m, "Buffers:        ", i.bufferram);
 show_val_kb(m, "Cached:         ", cached);
 show_val_kb(m, "SwapCached:     ", total_swapcache_pages());
 show_val_kb(m, "Active:         ", pages[LRU_ACTIVE_ANON] +
        pages[LRU_ACTIVE_FILE]);
 show_val_kb(m, "Inactive:       ", pages[LRU_INACTIVE_ANON] +
        pages[LRU_INACTIVE_FILE]);
 show_val_kb(m, "Active(anon):   ", pages[LRU_ACTIVE_ANON]);
 show_val_kb(m, "Inactive(anon): ", pages[LRU_INACTIVE_ANON]);
 show_val_kb(m, "Active(file):   ", pages[LRU_ACTIVE_FILE]);
 show_val_kb(m, "Inactive(file): ", pages[LRU_INACTIVE_FILE]);
 show_val_kb(m, "Unevictable:    ", pages[LRU_UNEVICTABLE]);
 show_val_kb(m, "Mlocked:        ", global_zone_page_state(NR_MLOCK));
 
#ifdef CONFIG_HIGHMEM
 show_val_kb(m, "HighTotal:      ", i.totalhigh);
 show_val_kb(m, "HighFree:       ", i.freehigh);
 show_val_kb(m, "LowTotal:       ", i.totalram - i.totalhigh);
 show_val_kb(m, "LowFree:        ", i.freeram - i.freehigh);
#endif
 
#ifndef CONFIG_MMU
 show_val_kb(m, "MmapCopy:       ",
      (unsigned long)atomic_long_read(&mmap_pages_allocated));
#endif
 
 show_val_kb(m, "SwapTotal:      ", i.totalswap);
 show_val_kb(m, "SwapFree:       ", i.freeswap);
 show_val_kb(m, "Dirty:          ",
      global_node_page_state(NR_FILE_DIRTY));
 show_val_kb(m, "Writeback:      ",
      global_node_page_state(NR_WRITEBACK));
 show_val_kb(m, "AnonPages:      ",
      global_node_page_state(NR_ANON_MAPPED));
 show_val_kb(m, "Mapped:         ",
      global_node_page_state(NR_FILE_MAPPED));
 show_val_kb(m, "Shmem:          ", i.sharedram);
 show_val_kb(m, "Slab:           ",
      global_node_page_state(NR_SLAB_RECLAIMABLE) +
      global_node_page_state(NR_SLAB_UNRECLAIMABLE));
 
 show_val_kb(m, "SReclaimable:   ",
      global_node_page_state(NR_SLAB_RECLAIMABLE));
 show_val_kb(m, "SUnreclaim:     ",
      global_node_page_state(NR_SLAB_UNRECLAIMABLE));
 seq_printf(m, "KernelStack:    %8lu kB\n",
     global_zone_page_state(NR_KERNEL_STACK_KB));
 show_val_kb(m, "PageTables:     ",
      global_zone_page_state(NR_PAGETABLE));
#ifdef CONFIG_QUICKLIST
 show_val_kb(m, "Quicklists:     ", quicklist_total_size());
#endif
 
 show_val_kb(m, "NFS_Unstable:   ",
      global_node_page_state(NR_UNSTABLE_NFS));
 show_val_kb(m, "Bounce:         ",
      global_zone_page_state(NR_BOUNCE));
 show_val_kb(m, "WritebackTmp:   ",
      global_node_page_state(NR_WRITEBACK_TEMP));
 show_val_kb(m, "CommitLimit:    ", vm_commit_limit());
 show_val_kb(m, "Committed_AS:   ", committed);
 seq_printf(m, "VmallocTotal:   %8lu kB\n",
     (unsigned long)VMALLOC_TOTAL >> 10);
 show_val_kb(m, "VmallocUsed:    ", 0ul);
 show_val_kb(m, "VmallocChunk:   ", 0ul);
 
#ifdef CONFIG_MEMORY_FAILURE
 seq_printf(m, "HardwareCorrupted: %5lu kB\n",
     atomic_long_read(&num_poisoned_pages) #endif
 
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
 show_val_kb(m, "AnonHugePages:  ",
      global_node_page_state(NR_ANON_THPS) * HPAGE_PMD_NR);
 show_val_kb(m, "ShmemHugePages: ",
      global_node_page_state(NR_SHMEM_THPS) * HPAGE_PMD_NR);
 show_val_kb(m, "ShmemPmdMapped: ",
      global_node_page_state(NR_SHMEM_PMDMAPPED) * HPAGE_PMD_NR);
#endif
 
#ifdef CONFIG_CMA
 show_val_kb(m, "CmaTotal:       ", totalcma_pages);
 show_val_kb(m, "CmaFree:        ",
      global_zone_page_state(NR_FREE_CMA_PAGES));
#endif
 
 hugetlb_report_meminfo(m);
 
 arch_report_meminfo(m);
 
 return 0;
}
Copier après la connexion

四、top 指令

用途:用于打印系统中的CPU和内存使用情况。输出结果中,可以很清晰的看出已用和可用内存的资源情况。top 最好的地方之一就是发现可能已经失控的服务的进程 ID 号(PID)。有了这些 PID,你可以对有问题的任务进行故障排除(或 kill)。

语法

top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
Copier après la connexion

参数说明:

d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
S : 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
s : 安全模式,将交谈式指令取消, 避免潜在的危机
i : 不显示任何闲置 (idle) 或无用 (zombie) 的进程
n : 更新的次数,完成后将会退出 top
b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
Copier après la connexion

举例

Combien de méthodes connaissez-vous sur lanalyse de lutilisation de la mémoire Linux ?

第一行,任务队列信息,同 uptime 命令的执行结果

系统时间:02:19:10 运行时间:up 2:26 min, 当前登录用户:1 user 负载均衡(uptime) load average: 0.00, 0.06, 0.07 average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

第二行,Tasks — 任务(进程)

Processus totaux : 229 au total, en cours d'exécution : 1 en cours d'exécution, en veille : 163 en veille, arrêtés : 0 arrêtés, processus zombies : 0 zombie

La troisième ligne, informations sur l'état du processeur

«

0,7%us【espace utilisateur】—Le pourcentage de CPU occupé par l'espace utilisateur. 1,0%sy[sysctl] : pourcentage de CPU occupé par l'espace du noyau. 0,0%ni【】—Pourcentage de CPU occupé par des processus qui ont changé de priorité 97,9%id【idolt】—Pourcentage de CPU inactif 0,3%wa[wait]—Pourcentage de CPU occupé par les E/S en attente 0,0%hi[Hardware IRQ]—Matériel Pourcentage d'occupation du processeur par interruption 0,0 % si【Interruptions logicielles】—Les interruptions logicielles occupent le pourcentage du processeur

La quatrième ligne, état de la mémoire

«

2017504 au total, 653616 gratuits, 1154200 utilisés, 209688 buff/cache【Quantité de mémoire cache】

La cinquième ligne, échangez les informations de partition d'échange

«

998396 au total, 771068 gratuits, 227328 utilisés 635608 disponibles Mem

.

La septième ligne et ci-dessous : suivi de l'état de chaque processus (tâche)

«

PID — identifiant de processus USER — propriétaire du processus PR — priorité du processus NI — valeur intéressante. Les valeurs négatives indiquent une priorité élevée, les valeurs positives indiquent une priorité faible. VIRT - La quantité totale de mémoire virtuelle utilisée par le processus, en Ko. VIRT=SWAP+RES RES — Taille de la mémoire physique utilisée par le processus qui n'a pas été échangée, en Ko. RES=CODE+DATA SHR — taille de la mémoire partagée, unité Ko S — état du processus. D=état de veille ininterrompue R=en cours d'exécution S=veille T=suivre/arrêter Z=processus zombie %CPU — le pourcentage de temps CPU occupé depuis la dernière mise à jour %MEM — le pourcentage de mémoire physique utilisé par le processus TIME+ — le CPU utilisé par le processus Temps total, unité 1/100 seconde COMMANDE — nom du processus (nom de la commande/ligne de commande)

常用实例

  • 显示进程信息
# top
Copier après la connexion
  • 显示完整命令
# top -c
Copier après la connexion
  • 以批处理模式显示程序信息
# top -b
Copier après la connexion
  • 以累积模式显示程序信息
# top -S
Copier après la connexion
  • 设置信息更新次数
top -n 2
Copier après la connexion

//表示更新两次后终止更新显示

  • 设置信息更新时间
# top -d 3
Copier après la connexion

//表示更新周期为3秒

  • 显示指定的进程信息
# top -p 139
Copier après la connexion

//显示进程号为139的进程信息,CPU、内存占用率等

  • 显示更新十次后退出
top -n 10
Copier après la connexion

五、htop 指令

htop 它类似于 top 命令,但可以让你在垂直和水平方向上滚动,所以你可以看到系统上运行的所有进程,以及他们完整的命令行。

可以不用输入进程的 PID 就可以对此进程进行相关的操作 (killing, renicing)。

htop快照:Combien de méthodes connaissez-vous sur lanalyse de lutilisation de la mémoire Linux ?

可以使用快捷键

F1,h,?:查看htop使用说明,
F2,s  :设置选项
F3,/  :搜索进程
F4,\  :过滤器,输入关键字搜索
F5,t  :显示属性结构
F6,:选择排序方式
F7, [,:减少进程的优先级(nice)
F8,] :增加进程的优先级(nice)
F9,k :杀掉选中的进程
F10,q:退出htop
u:显示所有用户,并可以选中某一特定用户的进程
U:取消标记所有的进程
Copier après la connexion

第1行-第4行:显示CPU当前的运行负载,有几核就有几行,我的是1核

Mem:显示内存的使用情况,3887M大概是3.8G,此时的Mem不包含buffers和cached的内存,所以和free -m会不同Swp:显示交换空间的使用情况,交换空间是当内存不够和其中有一些长期不用的数据时,ubuntu会把这些暂时放到交换空间中

其他信息可以参考top命令说明。

PS:如果你终端没安装 htop,先通过指令来安装。sudo apt-get update sudo apt install htop

六、查看制定进程的内存

通过/proc/procid/status查看进程内存

peng@ubuntu:~$ cat /proc/4398/status
Name: kworker/0:0    //进程名
Umask: 0000
State: I (idle)   //进程的状态
//R (running)", "S (sleeping)", "D (disk sleep)", "T (stopped)", "T(tracing stop)", "Z (zombie)", or "X (dead)"
Tgid: 4398 //线程组的ID,一个线程一定属于一个线程组(进程组).
Ngid: 0
Pid: 4398 //进程的ID,更准确的说应该是线程的ID.
PPid: 2  //当前进程的父进程
TracerPid: 0 //跟踪当前进程的进程ID,如果是0,表示没有跟踪
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64 //当前分配的文件描述符,该值不是上限,如果打开文件超过64个文件描述符,将以64进行递增
Groups: //启动这个进程的用户所在的组
NStgid: 4398
NSpid: 4398
NSpgid: 0
NSsid: 0
Threads: 1
SigQ: 0/7640
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffffffffff
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
NoNewPrivs: 0
Seccomp: 0
Speculation_Store_Bypass: vulnerable
Cpus_allowed: 00000000,00000000,00000000,00000001
Cpus_allowed_list: 0
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 5
nonvoluntary_ctxt_switches: 0
Copier après la connexion

总结:

确定内存使用情况是Linux运维工程师必要的技能,尤其是某个应用程序变得异常和占用系统内存时。当发生这种情况时,知道有多种工具可以帮助你进行故障排除十分方便的。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:lxlinux.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal