chkconfig | 管理 Linux 系统开机启动项。 |
---|---|
vmstat | 虚拟内存统计。 |
mpstat | 显示各个可用 CPU 的状态统计。 |
iostat | 统计系统 IO。 |
sar | 全面地获取系统的 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU 中断和网络等性能数据。 |
ipcs | 用于报告 Linux 中进程间通讯设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 |
ipcrm | 用来删除一个或更多的消息队列、信号量集或者共享内存标识。 |
strace | 用于诊断、调试 Linux 用户空间跟踪器。咱们用它来监控用户空间进程和内核的交互,好比系统调用、信号传递、进程状态变动等。 |
ltrace | 命令会跟踪进程的库函数调用, 它会显现出哪一个库函数被调用。 |
chkconfig命令
chkconfig命令:检查、设置系统的各类服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操做系统在每个执行等级中会执行哪些系统服务,其中包括各种常驻服务。谨记chkconfig不是当即自动禁止或激活一个服务,它只是简单的改变了符号链接。mysql
参数:linux
--add:增长所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增长相关数据; --del:删除所指定的系统服务,再也不由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据; --level<等级代号>:指定读系统服务要在哪个执行等级中开启或关毕。
等级代号列表: - 等级0表示:表示关机 - 等级1表示:单用户模式 - 等级2表示:无网络链接的多用户命令行模式 - 等级3表示:有网络链接的多用户命令行模式 - 等级4表示:不可用 - 等级5表示:带图形界面的多用户模式 - 等级6表示:从新启动
例子ios
chkconfig --list #列出全部的系统服务。 chkconfig --add httpd #增长httpd服务。 chkconfig --del httpd #删除httpd服务。 chkconfig --level httpd 2345 on #设置httpd在运行级别为二、三、四、5的状况下都是on(开启)的状态。 chkconfig --list #列出系统全部的服务启动状况。 chkconfig --list mysqld #列出mysqld服务设置状况。 chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操做只在等级3和5执行,on表示启动,off表示关闭。 chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括二、三、四、5等级。
如何增长一个服务:算法
- 服务脚本必须存放在
/etc/ini.d/
目录下; chkconfig --add servicename
在chkconfig工具服务列表中增长此服务,此时服务会被在/etc/rc.d/rcN.d
中赋予K/S入口了;chkconfig --level 35 mysqld on
修改服务的默认启动等级。
vmstat命令
vmstat命令:显示虚拟内存状态(“Virtual Memory Statistics”),可是它能够报告关于进程、内存、I/O等系统总体运行状态。sql
格式:vmstat [options] [delay [count]]shell
参数缓存
-a:显示活动内页; -f:显示启动后建立的进程总数; -m:显示slab信息; -n:头信息仅显示一次; -s:以表格方式显示事件计数器和内存状态; -d:报告磁盘状态; -p:显示指定的硬盘分区状态; -S:输出信息的单位。
例子:网络
[root@xxx ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 6408 198004 0 613984 0 0 10 31 87 105 0 0 100 0 0
字段说明:数据结构
Procs(进程)函数
- r: 运行队列中进程数量,这个值也能够判断是否须要增长CPU。(长期大于1)
- b: 等待IO的进程数量。
Memory(内存)
- swpd: 使用虚拟内存大小,若是swpd的值不为0,可是SI,SO的值长期为0,这种状况不会影响系统性能。
- free: 空闲物理内存大小。
- buff: 用做缓冲的内存大小。
- cache: 用做缓存的内存大小,若是cache的值大的时候,说明cache处的文件数多,若是频繁访问到的文件都能被cache处,那么磁盘的读IO bi会很是小。
Swap
- si: 每秒从交换区写到内存的大小,由磁盘调入内存。
- so: 每秒写入交换区的内存大小,由内存调入磁盘。
注意:内存够用的时候,这2个值都是0,若是这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)不多的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,若是free不多,可是si和so也不多(大多时候是0),那么不用担忧,系统性能这时不会受到影响的。
IO(如今的Linux版本块的大小为1kb)
- bi: 每秒读取的块数
- bo: 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
system(系统)
- in: 每秒中断数,包括时钟中断。
- cs: 每秒上下文切换数。
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
CPU(以百分比表示)
- us: 用户进程执行时间百分比(user time)
us的值比较高时,说明用户进程消耗的CPU时间多,可是若是长期超50%的使用,那么咱们就该考虑优化程序算法或者进行加速。
- sy: 内核系统进程执行时间百分比(system time)
sy的值高时,说明系统内核消耗的CPU资源多,这并非良性表现,咱们应该检查缘由。
- wa: IO等待时间百分比
wa的值高时,说明IO等待比较严重,这可能因为磁盘大量做随机访问形成,也有可能磁盘出现瓶颈(块操做)。
- id: 空闲时间百分比
mpstat命令
mpstat命令:用于多CPU环境下,它显示各个可用CPU的状态系你想。这些信息存放在/proc/stat
文件中。在多CPUs系统里,其不但能查看全部CPU的平均情况信息,并且可以查看特定CPU的信息。
格式
mpstat [ -A ] [ -u ] [ -V ] [ -I { SUM | CPU | SCPU | ALL } ] [ -P { cpu [,...] | ON | ALL } ] [ interval [ count ] ]
参数
-P:指定CPU编号。 interval: 间隔时间 count: 次数
例子:
# 每两秒显示,总共显示三次,-P指定CPU为ALL [root@xxx ~]# mpstat -P ALL 2 3 Linux 3.10.0-862.el7.x86_64 (xxx) 07/20/2019 _x86_64_ (1 CPU) 12:55:17 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 12:55:19 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 12:55:19 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 ...
iostat命令
iostat命令:用于监视系统输入输出设备和CPU的使用状况。它的特色是汇报磁盘活动统计状况,同时也会汇报出CPU使用状况。同vmstat同样,iostat也有一个弱点,就是它不能对某个进程进行深刻分析,仅对系统的总体状况进行分析。
格式:
iostat [ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] [ -j { ID | LABEL | PATH | UUID | ... } ] [ [ -T ] -g group_name ] [ -p [ device [,...] | ALL ] ] [ device [...] | ALL ] [ interval [ count ] ]
参数:
-c:仅显示CPU使用状况; -d:仅显示设备利用率; -k:显示状态以千字节每秒为单位,而不使用块每秒; -m:显示状态以兆字节每秒为单位; -p:仅显示块设备和全部被使用的其余分区的状态; -t:显示每一个报告产生时的时间; -V:显示版号并退出; -x:显示扩展状态。
标示 | 说明 |
---|---|
Device | 监测设备名称 |
rrqm/s | 每秒须要读取需求的数量 |
wrqm/s | 每秒须要写入需求的数量 |
r/s | 每秒实际读取需求的数量 |
w/s | 每秒实际写入需求的数量 |
rsec/s | 每秒读取区段的数量 |
wsec/s | 每秒写入区段的数量 |
rkB/s | 每秒实际读取的大小,单位为KB |
wkB/s | 每秒实际写入的大小,单位为KB |
avgrq-sz | 需求的平均大小区段 |
avgqu-sz | 需求的平均队列长度 |
await | 等待I/O平均的时间(milliseconds) |
svctm | I/O需求完成的平均时间 |
%util | 被I/O需求消耗的CPU百分比 |
例子:
[root@xxx ~]# iostat Linux 3.10.0-862.el7.x86_64 (xxx) 07/20/2019 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.19 0.00 0.23 0.01 0.00 99.57 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 1.45 10.10 31.39 1409633 4382534 scd0 0.00 0.01 0.00 1028 0 dm-0 1.54 9.97 30.95 1391650 4321574 dm-1 0.01 0.03 0.04 3840 6160
sar命令
sar命令:Linux下系统运行状态统计工具,它将指定的操做系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,而后经过计算数据和比例来表达系统的当前运行状态。它的特色是能够连续对系统取样,得到大量的取样数据。取样数据和分析的结果均可以存入文件,使用它时消耗的系统资源很小。
格式:
sar [ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ] [ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ] [ -I { int [,...] | SUM | ALL | XALL } ] [ -P { cpu [,...] | ALL } ] [ -m { keyword [,...] | ALL } ] [ -n { keyword [,...] | ALL } ] [ -j { ID | LABEL | PATH | UUID | ... } ] [ -f [ filename ] | -o [ filename ] | -[0-9]+ ] [ -i interval ] [ -s [ hh:mm:ss ] ] [ -e [ hh:mm:ss ] ] [ interval [ count ] ]
参数:
-A:显示全部的报告信息; -b:显示I/O速率; -B:显示换页状态; -c:显示进程建立活动; -d:显示每一个块设备的状态; -e:设置显示报告的结束时间; -f:从指定文件提取报告; -i:设状态信息刷新的间隔时间; -P:报告每一个CPU的状态; -R:显示内存状态; -u:显示CPU利用率; -v:显示索引节点,文件和其余内核表的状态; -w:显示交换分区状态; -x:显示给定进程的状态。
ipcs命令
ipcs命令:用于报告Linux中进程间通讯设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。
参数:
-a:显示所有可显示的信息; -q:显示活动的消息队列信息; -m:显示活动的共享内存信息; -s:显示活动的信号量信息。
例子:
[root@xxx ~]# ipcs -a ------ Message Queues -------- key msqid owner perms used-bytes messages ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status ------ Semaphore Arrays -------- key semid owner perms nsems
ipcrm命令
ipcrm命令:用来删除一个或更多的消息队列、信号量集或者共享内存标识。
格式:
ipcrm [options] ipcrm {shm|msg|sem} id...
参数:
-m SharedMemory id 删除共享内存标识 SharedMemoryID。与 SharedMemoryID 有关联的共享内存段以及数据结构都会在最后一次拆离操做后删除。 -M SharedMemoryKey 删除用关键字 SharedMemoryKey 建立的共享内存标识。与其相关的共享内存段和数据结构段都将在最后一次拆离操做后删除。 -q MessageID 删除消息队列标识 MessageID 和与其相关的消息队列和数据结构。 -Q MessageKey 删除由关键字 MessageKey 建立的消息队列标识和与其相关的消息队列和数据结构。 -s SemaphoreID 删除信号量标识 SemaphoreID 和与其相关的信号量集及数据结构。 -S SemaphoreKey 删除由关键字 SemaphoreKey 建立的信号标识和与其相关的信号量集和数据结构。
strace命令
strace命令:一个集诊断、调试、统计与一体的工具,咱们可使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工做过程的目的。固然strace与专业的调试工具好比说gdb之类的是无法相比的,由于它不是一个专业的调试器。
格式
strace [-CdffhikqrtttTvVxxy] [-In] [-bexecve] [-eexpr]... [-acolumn] [-ofile] [-sstrsize] [-Ppath]... -ppid... / [-D] [-Evar[=val]]... [-uusername] command [args] strace -c[df] [-In] [-bexecve] [-eexpr]... [-Ooverhead] [-Ssortby] -ppid... / [-D] [-Evar[=val]]... [-uusername] command [args]
参数:
-c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 若是提供-o filename,则全部进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. -F 尝试跟踪vfork调用.在-f时,vfork不被跟踪. -h 输出简要的帮助信息. -i 输出系统调用的入口指针. -q 禁止输出关于脱离的消息. -r 打印出相对时间关于,,每个系统调用. -t 在输出中的每一行前加上时间信息. -tt 在输出中的每一行前加上时间信息,微秒级. -ttt 微秒级输出,以秒了表示时间. -T 显示每一调用所耗的时间. -v 输出全部的系统调用.一些调用关于环境变量,状态,输入输出等调用因为使用频繁,默认不输出. -V 输出strace的版本信息. -x 以十六进制形式输出非标准字符串 -xx 全部字符串以十六进制形式输出. -a column 设置返回值的输出位置.默认 为40. -e expr 指定一个表达式,用来控制如何跟踪.格式:[qualifier=][!]value1[,value2]... qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否认符号.例如:-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open 表示跟踪除了open之外的其余调用.有两个特殊的符号 all 和 none. 注意有些shell使用!来执行历史记录里的命令,因此要使用\\. -e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. -e trace=file 只跟踪有关文件操做的系统调用. -e trace=process 只跟踪有关进程控制的系统调用. -e trace=network 跟踪与网络有关的全部系统调用. -e strace=signal 跟踪全部与系统信号有关的 系统调用 -e trace=ipc 跟踪全部与进程通信有关的系统调用 -e abbrev=set 设定strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all. -e raw=set 将指定的系统调用的参数以十六进制显示. -e signal=set 指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号. -e read=set 输出从指定文件中读出 的数据.例如: -e read=3,5 -e write=set 输出写入到指定文件中的数据. -o filename 将strace的输出写入文件filename -p pid 跟踪指定的进程pid. -s strsize 指定输出的字符串的最大长度.默认为32.文件名一直所有输出. -u username 以username的UID和GID执行被跟踪的命令
例子:http://man.linuxde.net/strace
ltrace命令
ltrace命令:用来跟踪进程调用库函数的状况。
格式:
ltrace [-e filter|-L] [-l|--library=library_pattern] [-x filter] [-S] [-b|--no-signals] [-i] [-w|--where=nr] [-r|-t|-tt|-ttt] [-T] [-F path‐ list] [-A maxelts] [-s strsize] [-C|--demangle] [-a|--align column] [-n|--indent nr] [-o|--output filename] [-D|--debug mask] [-u username] [-f] [-p pid] [[--] command [arg ...]] ltrace -c [-e filter|-L] [-l|--library=library_pattern] [-x filter] [-S] [-o|--output filename] [-f] [-p pid] [[--] command [arg ...]] ltrace -V|--version ltrace -h|--help
参数
-a 对齐具体某个列的返回值。 -c 计算时间和调用,并在程序退出时打印摘要。 -C 解码低级别名称(内核级)为用户级名称。 -d 打印调试信息。 -e 改变跟踪的事件。 -f 跟踪子进程。 -h 打印帮助信息。 -i 打印指令指针,当库调用时。 -l 只打印某个库中的调用。 -L 不打印库调用。 -n, --indent=NR 对每一个调用级别嵌套以NR个空格进行缩进输出。 -o, --output=file 把输出定向到文件。 -p PID 附着在值为PID的进程号上进行ltrace。 -r 打印相对时间戳。 -s STRLEN 设置打印的字符串最大长度。 -S 显示系统调用。 -t, -tt, -ttt 打印绝对时间戳。 -T 输出每一个调用过程的时间开销。 -u USERNAME 使用某个用户id或组ID来运行命令。 -V, --version 打印版本信息,而后退出。 -x NAME treat the global NAME like a library subroutine.(求翻译)