当前位置: 首页 > Linux

Linux的vmstat命令_0

时间:2023-04-06 18:29:38 Linux

【Linux常用命令速查手册】跟随【入门站】,后台回复“1001”即可领取。vmstat是VirtualMeomoryStatistics(虚拟内存统计)的缩写,可以监控操作系统的虚拟内存、进程、CPU活动情况。它对系统的整体情况进行统计,但缺点是不能对某个过程进行深入分析。vmstat工具提供了一种观察系统性能的低开销方法。因为vmstat本身是一个低开销的工具,在负载非常高的服务器上,需要查看和监控系统的健康状况。您仍然可以使用vmstat在控制窗口中输出结果。物理内存和虚拟内存的区别在于直接从物理内存中读写数据。它比从硬盘读取和写入数据快得多。因此,我们希望所有的数据读写都在内存中完成,而内存是有限的,这就引出了物理内存和虚拟内存的概念。物理内存是系统硬件提供的内存大小。是真实的记忆。相对于物理内存,Linux下还有一个虚拟内存的概念。虚拟内存是为满足物理内存不足而提出的一种策略。它使用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的磁盘空间称为交换空间(SwapSpace)。作为物理内存的扩展,Linux会在物理内存不足的时候使用swap分区的虚拟内存。更具体地说,内核会将暂时不用的内存块信息写入交换空间,从而释放物理内存。这块内存然后可以用于其他目的,当需要原始内容时,信息将从交换空间重新读取到物理内存中。Linux的内存管理采用分页访问机制。为了保证物理内存能够得到充分利用,内核会在适当的时候自动将物理内存中不常用的数据块交换到虚拟内存中,将经常使用的数据块信息持久化到物理内存中。要深入了解linux内存运行机制,需要了解以下几个方面:首先,Linux系统会时不时地进行页面交换操作,以尽可能多地保留空闲物理内存。暂时未使用的内存页将被换出。这避免了等待交换所需的时间。其次,linux有条件地进行页面交换。并非所有页面在不使用时都交换到虚拟内存。linux内核只是按照“最近最频繁使用”的算法,将一些不经常使用的页面文件交换到虚拟内存中。有时候我们会看到这样一个现象:Linux的物理内存还是很多的,但是swap空间也用的很多。其实,这并不奇怪。例如,一个占用大量内存的进程在运行时,需要消耗大量的内存资源。当进程结束释放大量内存时,刚才换出的页面文件不会自动换入物理内存。除非必要,此时系统的物理内存会空闲很多,交换空间也在同时被使用。刚才提到的现象出现了。在这一点上,什么都不用担心,知道是怎么回事就可以了。最后,交换空间的页面在使用时会先交换到物理内存中。如果此时没有足够的物理内存来容纳这些页面,它们将被立即换出。这样一来,虚拟内存中可能没有足够的空间来存储这些交换的页面,最终会导致linux中的假死机和服务异常等问题。虽然linux可以在一段时间内自行恢复,但恢复后的系统基本无法使用。虚拟内存原理系统中运行的每个进程都需要使用内存,但并不是每个进程都需要一直使用系统分配的内存空间。当系统运行所需的内存超过实际物理内存时,内核会释放部分或全部被某些进程占用但未使用的物理内存,将这部分数据存储在磁盘上,直到进程的下一次调用,并将释放的内存提供给需要它的进程。在Linux内存管理中,上述内存调度主要是通过“Paging”和“Swapping”来完成的。分页算法就是把内存中不经常使用的页面换到磁盘上,把活跃的页面保留在内存中供进程使用。交换技术是将整个过程而不是部分页面交换到磁盘。将页面写入磁盘的过程称为Page-Out,将页面从磁盘返回到内存的过程称为Page-In。当内核需要一个页面,但发现该页面不在物理内存中(因为已经Page-Out),就会发生页面错误(PageFault)。当系统内核发现可操作内存变少时,会通过Page-Out释放部分物理内存。虽然Page-Out不会频繁发生,但如果Page-out频繁且连续发生,直到内核管理分页所花费的时间超过运行程序所花费的时间,系统性能就会急剧下降。这时候系统已经运行得很慢或者进入了挂起状态,也叫颠簸(bump)。命令格式vmstat[-a][-n][-Sunit][delay[count]]vmstat[-s][-n][-Sunit]vmstat[-m][-n][delay[count]]vmstat[-d][-n][delay[count]]vmstat[-pdiskpartition][-n][delay[count]]vmstat[-f]vmstat[-V]命令功能用于显示虚拟memory信息命令参数-a:显示活动和非活动内存-f:显示自系统启动以来的fork数。-m:显示slabinfo-n:每个字段名在开头只显示一次。-s:显示与内存相关的统计信息和各种系统活动量。delay:刷新间隔。如果未指定,将只显示一个结果。计数:刷新次数。如果不指定刷新次数,但指定了刷新间隔,则刷新次数为无限次。-d:显示与磁盘相关的统计信息。-p:显示指定磁盘分区统计信息-S:使用指定单位显示。参数为k、K、m、M,分别代表1000、1024、1000000、1048576字节(byte)。默认单位是K(1024字节)-V:显示vmstat版本信息。显示虚拟内存使用情况>vmstat|column-tcolumn-t用于表头和数据列的对齐,方便查看表头字段描述Procs(进程):r:运行队列中的进程数b:等待IOMemory的进程数(memory):swpd:usevirtualmemorysizefree:availablememorysizebuff:memorysizeusedasbuffercache:memorysizeusedascacheSwap:si:每秒从交换区写入内存的大小so:每秒写入交换区的内存区域大小IO:(当前Linux版本的块大小为1024bytes)bi:每秒读取的块数bo:每秒写入的块数system:in:每秒的中断数,包括时钟中断.cs:每秒上下文切换的次数。CPU(以百分比表示):us:用户进程执行时间(用户时间)sy:系统进程执行时间(系统时间)id:空闲时间(包括IO等待时间),中央处理器空闲时间。以百分比表示。wa:等待IO时间备注:如果r经常大于4,id经常小于40,说明CPU负载过重。如果pi和po长时间不等于0,说明内存不足。如果disk经常不等于0,而b中的queue大于3,说明io性能不好。Linux不仅具有很高的稳定性和可靠性,而且具有良好的可伸缩性和可扩展性,可以针对不同的应用程序和硬件环境进行调整以优化最佳性能,以满足当前应用程序的需求。因此,企业在维护Linux系统和进行系统调优时,了解系统性能分析工具非常重要。在5秒内获取5个样本>vmstat151是以秒为单位的采样间隔。5为显示active和inactive内存的样本总数>vmstat-a15使用-a选项显示active和inactive内存时,除了加上inact和active外,显示内容同例1。Memory(内存)inact:非活动内存大小(使用-a选项时显示)active:活动内存大小(使用-a选项时显示)查看系统有多少次fork>vmstat-f164889872forks这个数据是fromCheckmemoryusagedetailsobtainedintheprocessesfieldin/proc/stat>vmstat-s3882032Ktotalmemory921952Kusedmemory2505960Kactivememory621748Kinactivememory154180Kfreememory198460Kbuffermemory260swapcamemory260swap7440KKtotalswap0Kusedswap0Kfreeswap111113294non-niceusercputicks17688niceusercputicks52090953systemcputicks17962243142idlecputicks20022667IO-waitcputicks0IRQcputicks888181softirqcputicks0stolencputicks44202pages637inpagespagedout0pagesswappedin0pagesswappedout252048353interrupts2496649494CPUcontextswitches1524477152boottime164890019forks这些信息分别来自读取/proc/vmeminfo/stat和磁盘。/写&g吨;vmstat-d这个信息主要来自于/proc/diskstats.merged:表示一个合并的写/读请求,一般系统会将多个连接/相邻的读/写请求合并在一起进行操作。查看/dev/sda1diskread/write>vmstat-p/dev/vda1vda1readsreadsectorswritesrequestedwrites308184918841454702305808044013352345这些信息主要来自/proc/diskstatsreads:这个分区的读次数。读取扇区:从此分区读取的扇区数。writes:此分区的写入次数。requestedwrites:来自该分区的写请求数。查看系统的slab信息>vmstat-mCacheNumTotalSizePagesisofs_inode_cache121264012ext4_groupinfo_4k42042013630ext4_inode_cache208902208995103215ext4_xattr92928846ext4_free_data140814086464ext4_allocation_context646412832ext4_io_end341635287256ext4_extent_status9606825734640102jbd2_journal_handle1701704885jbd2_journal_head90090011236jbd2_revoke_table_s25625616256jbd2_revoke_record_s1152166432128ip6_dst_cache363644818RAWv61313121613UDPLITEv600121613UDPv62626121613tw_sock_TCPv624024025616TCPv676135217615cfq_queue343423217CacheNumTotalSizePagesbsg_cmd0031213mqueue_inode_cache181889618hugetlbfs_inode_cache131360813configfs_dir_cache92928846dquot20820825616userfaultfd_ctx_cache0012832fanotify_event_info204420445673dnotify_mark63095212034pid_namespace00217615posix_timers_cache0024816UDP精简版00108815flow_cache0014428xfrm_dst_cache0057614UDP135135108815tw_sock_TCP25625625616TCP144144198416scsi_data_buffer0024170blkdev_queue1515212815blkdev_requests636338421CacheNumTotalSizePagesblkdev_ioc19519510439user_namespace0028014sock_inode_cache18525264012net_namespace0049926shmem_inode_cache85588868012Acpi-ParseExt347234727256Acpi-Namespace51051040102taskstats242432812proc_inode_cache224162298065612sigqueue505016025bdev_cache383883219sysfs_dir_cache122761227611236inode_cache8602884059213dentry76060676967119221iint_cache008051selinux_inode_security984398438051buffer_head33783035400310439vm_area_struct5411594021618mm_struct180240160020CacheNumTotalSizePagesfiles_cache17320464012signal_cache147168115214sighand_cache137180211215task_xstate36136183219task_struct20222440168anon_vma260431628051shared_policy_node9652123254885numa_policy151526415radix_tree_node9752410633058414idr_layer_cache240240211215dma-kmalloc-81920081924dma-kmalloc-4096004096alloc-82dma-400204816dma-kmalloc-102400102416dma-kmalloc-512323251216dma-kmalloc-2560025616dma-kmalloc-1280012832dma-kmalloc-640006464dma-0kmalloc-332128CacheNum总大小Pagesdma-kmalloc-160016256dma-kmalloc-8008512dma-kmalloc-1920019221dma-kmalloc-96009642kmalloc-8192284481924kmalloc-4092846091-2048354512204816kmalloc-102411351360102416kmalloc-51263868851216kmalloc-2561907270425616kmalloc-192997559985519221kmalloc-128112901161612832kmalloc-96202823529642kmalloc-641146525600256006464kmalloc-3217921792179217921792179232128kmalloc-16128kmalloc-16/proc/slabinfoslab中:由于内核有很多小对象,这些对象的构造和销毁非常频繁,比如i-node和dentry。如果这些对象每次构造时都需要从内存中取出一页(4kb),实际上只有几个Byte,这样会很浪费,为了解决这个问题,引入了一种新的机制来处理如何在同一个pageframe中分配小的存储区域,slab可以分配小的objects,这样就不需要为每个object都分配一个pageframe,节省了空间。内核经常创建和销毁一些小对象。slab缓冲这些小对象,可以重复使用,减少内存分配次数。原文链接:https://rumenz.com/rumenbiji/...微信公众号:入门【Linux常用命令速查手册】关注【入门】,后台回复“1001”即可领取。