
小编为大家整理出了三个有关性能监控和优化命令详细讲解,别看只有三个,但不影响他们啊,本篇文章很长,涉及top命令、free命令和vmstat命令,真的是很详细的讲解,希望能帮到大家,另外还有两条相关的命令详解,消化消化这篇的知识,过几天再上那两条~
1top命令top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
下面详细介绍它的使用方法。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。
比较准确地说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用。
内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
命令格式:
top[参数]
命令功能:
显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
命令参数:
-b批处理
-c显示完整的指命令
-I忽略失效过程
-s保密模式
-S累积模式
-i时间设置间隔时间
-u用户名指定用户名
-p进程号指定进程
-n次数循环显示的次数
4.使用实例:
实例1:显示进程信息
命令:top
输出:
[root@TG1704log]freetotalusedfreesharedbufferscachedMem:329401123084168420984280454534011363424-/+buffers/cache:07192Swap:32764556194498430819572[root@SF1150service]free-mtotalusedfreesharedbufferscachedMem:321683011920480443811097-/+buffers/cache:1458317584Swap:31996189930097
说明:
下面是对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+buffers/cached):
used:已使用多大。
free:可用有多少。
第四行是交换分区SWAP的,也就是我们通常所说的虚拟内存。
区别:第二行(mem)的used/free与第三行(-/+buffers/cache)used/free的区别。
这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached都是属于被使用,所以它的可用内存是2098428KB,已用内存是30841684KB,其中包括,内核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached。
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统freememory+buffers+cached。
如本机情况的可用内存为:
18007156=2098428KB+4545340KB+11363424KB
接下来解释什么时候内存会被交换,以及按什么方交换。
当可用内存少于额定值的时候,就会开会进行交换.如何看额定值:
命令:
cat/proc/meminfo
输出:
[root@SF1150service]free-ttotalusedfreesharedbufferscachedMem:329401123084502420950880454534011364324-/+buffers/cache:04752Swap:32764556194498430819572Total:657046683279000832914660[root@SF1150service]free-s10totalusedfreesharedbufferscachedMem:329401123084452820955840454534011364380-/+buffers/cache:05304Swap:32764556194498430819572totalusedfreesharedbufferscachedMem:3294011230843932209611364388-/+buffers/cache:05908Swap:327645561944984308195723、vmstat
vmstat是VirtualMeomoryStatistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat工具提供了一种低开销的系统性能观察方式。因为vmstat本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat输出结果。在学习vmstat命令前,我们先了解一下Linux系统中关于物理内存和虚拟内存相关信息。
物理内存和虚拟内存区别:
我们知道,直接从物理内存读写数据要比从硬盘读写数据要快得多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。
物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(SwapSpace)。
作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样一来,物理内存得到了释放,这块内存就可以用于其free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。
1.命令格式:
free[参数]
2.命令功能:
free命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
3.命令参数:
-b以Byte为单位显示内存使用情况。
-k以KB为单位显示内存使用情况。
-m以MB为单位显示内存使用情况。
-g以GB为单位显示内存使用情况。
-o不显示缓冲区调节列。
-s间隔秒数持续观察内存使用状况。
-t显示内存总和列。
-V显示版本信息。
4.使用实例:
实例1:显示内存使用情况
命令:
freefree-gfree-m
输出:
[root@SF1150service]free-gtotalusedfreesharedbufferscachedMem:312920410-/+buffers/cache:1417Swap:31129[root@SF1150service]vmstat-a25procs-----------memory-------------swap-------io------system-------cpu------rbswpdfreeinactactivesisobiboincsussyidwast0003029752387728500100000003029752387728505303029752387728500436001000000030297523877285043300100000003029752387728503320010000
说明:
使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与例子1相同。
字段说明:
Memory(内存):
inact:非活跃内存大小(当使用-a选项时显示)
active:活跃的内存大小(当使用-a选项时显示)
实例3:查看系统已经fork了多少次
命令:
vmstat-f
输出:
[root@SCF1129~]
说明:
这个数据是从/proc/stat中的processes字段里取得的
实例4:查看内存使用的详细信息
命令:
vmstat-s
输出:
[root@localhost~]vmstat-ddisk-------------reads------------------------writes----------------IO------totalmergedsectorsmstotalmergedsectorsmscursecram00000000000ram10000000000ram20000000000ram30000000000ram0ram50000000000ram60000000000ram70000000000ram0ram90000000000ram100000000000ram110000000000ram120000000000ram0ram0ram0sda33381645560681118288491hdc0000000000fd00000000000md00000000000[root@localhost~]df文件系统1K-块已用可用已用%挂载点/dev/sda311193365482764206810348355003%/tmpfs329783760329783760%/dev/shm/dev/sda11032088596049200567%/boot[root@SCF1129~]vmstat-p/dev/sda3sda3readsreadsectorswritesrequestedwrites42935035789980301488[root@SCF1129~]vmstat-mCacheNumTotalSizePagesip_conntrack_expect0013628ip_conntrack31330413ip_fib_alias11596459ip_fib_hash11596459AF_VMCI009604bio_map_info10010510647dm_mpath0010647jbd_4k0040961dm_uevent0026083dm_tio0024144dm_io004877scsi_cmd_cache101038410sgpool-128323240961sgpool-64323220482sgpool-32323210244sgpool-1632325128sgpool-8454525615scsi_io_context0011234ext3_inode_cache51080511057605ext3_xattr36888844journal_handle1814424144journal_head56809640revoke_table420216202revoke_record0032112uhci_urb_priv005667UNIX133370411flow_cache0012830msi_cache33596459cfq_ioc_pool149012830cfq_pool129021618crq_pool16968048deadline_drq008048as_arq009640mqueue_inode_cache148964isofs_inode_cache006086hugetlbfs_inode_cache175767CacheNumTotalSizePagesext2_inode_cache007205ext2_xattr008844dnotify_cache004092dquot0025615eventpoll_pwq3537253eventpoll_epi32019220inotify_event_cache004092inotify_watch_cache1537253kioctx0032012kiocb0025615fasync_cache0024144shmem_inode_cache2542907685posix_timers_cache0012830uid_cache0012830ip_mrt_cache0012830tcp_bind_bucket311232112inet_peer_cache0012830secpath_cache006459xfrm_dst_cache0038410ip_dst_cache51038410arp_cache11525615RAW357685UDP5107685tw_sock_TCP0019220request_sock_TCP0012830TCP4516005blkdev_ioc141186459blkdev_queue203015765blkdev_requests134227214biovec-2567740961biovec-1287820482biovec-647810244biovec-1671525615biovec-47596459biovec-12320216202bio27027012830utrace_engine_cache006459CacheNumTotalSizePagesutrace_cache006459sock_inode_cache33486406skbuff_fclone_cache775127skbuff_head_cache31939025615file_lock_cache12217622Acpi-Operand4Acpi-ParseExt006459Acpi-Parse004092Acpi-State008048Acpi-Namespace2871291232112delayacct_cache812956459taskstats_cache4537253proc_inode_cache6sigqueue0016024radix_tree_node367bdev_cache23248324sysfs_dir_cache537054128844mnt_cache263025615inode_cache200920095607dentry_cache609526102021618filp479130525615names_cache3340961avc_node14537253selinux_inode_security99412008048key_jar22019220idr_layer_cache74775287buffer_head1640451648009640mm_struct51568964vm_area_struct12fs_cache351776459files_cache36557685signal_cache721628329sighand_cache688421123task_struct768018882anon_vma45886424144pid832956459shared_policy_node004877CacheNumTotalSizePagesnuma_policy3714424144size-131072(DMA)001310721size-0721size-65536(DMA)00655361size-6553611655361size-32768(DMA)00327681size-3276822327681size-16384(DMA)00163841size-1638455163841size-8192(DMA)0081921size-81927781921size-4096(DMA)0040961size-409611011140961size-2048(DMA)0020482size-204860260220482size-1024(DMA)0010244size-102434435210244size-512(DMA)005128size-5124334805128size-256(DMA)0025615size-25615size-128(DMA)0012830size-64(DMA)006459size-64563957826459size-32(DMA)0032112size-12880193012830size-323005302432112kmem_cache
这组信息来自于/proc/slabinfo。
slab:由于内核会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry,这些对象如果每次构建的时候就向内存要一个页(4kb),而其实只有几个字节,这样就会非常浪费,为了解决这个问题,就引入了一种新的机制来处理在同一个页框中如何分配小存储区,而slab可以对小对象进行分配,这样就不用为每一个对象分配页框,从而节省了空间,内核对一些小对象创建析构很频繁,slab对这些小对象进行缓冲,可以重复利用,减少内存分配次数。