linux服务器性能监控以及mysql状态查看

Posted 飞入闲窗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux服务器性能监控以及mysql状态查看相关的知识,希望对你有一定的参考价值。

写在最前面:以下的都是命令形式完成,如果有编码基础,最好自己编码完成,并且打印出来的结果能够更直观,可以做成通用的。

1.Linux服务器

1.1PS

ps -ax | grep java:查找java相关的进程

ps -aux --sort -pcpu:根据cup的使用降序排序

ps -aux --sort -pmem:根据内存的使用降序排序

ps -aux | head -n 10:只显示前10的进程       【以上可以自由组合  大家看情况使用】

1.2top

linux服务器性能监控以及mysql状态查看_sed

  • us 用户空间占用CPU百分比
  • sy 内核空间占用CPU百分比
  • id 空闲CPU百分比
  • total 物理内存总量
  • used 使用的物理内存总量
  • free 空闲内存总量
  • buffers 用作内核缓存的内存量

1.3free

 

linux服务器性能监控以及mysql状态查看_服务器_02

  • total:表示物理内存总量(total = used + free)
  • used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
  • free:未被分配的内存。
  • shared:共享内存,一般系统不会用到。
  • buffers:系统分配但未被使用的buffers 数量。
  • cached:系统分配但未被使用的cache 数量
  • used:也就是第一行中的used – buffers-cached 也是实际使用的内存总量。
  • Swap:表示硬盘上交换分区的使用情况,这里我们不做关注。

1.4vmstat

举例  vmstat 3 10  标识3秒采集一次  一共采集10次

 

linux服务器性能监控以及mysql状态查看_mysql_03

  • r列 显示运行和等待CPU时间片的进程数,若其值长时间大于系统CPU个数,就说明CPU资源可能不足,可以考虑增加CPU;
  • b列 显示在等待资源的进程数,比如正在等待I/O或者内存交换等。
  • swpd列 显示切换到内存交换区的内存数量(以KB为单位)。若swpd的值不为0或者比较大,同时si、so的值长时间为0,那这种情况一般不用担心,不会影响系统性能
  • free列 显示当前空闲的物理内存数量(以KB为单位)
  • buff列 显示buffers cache的内存数量,一般对块设备的读写才需要缓冲
  • cache列 显示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好
  • si列 显示由磁盘调入内存,也就是内存进入内存交换区的数量
  • so列 显示由内存调入磁盘,也就是内存交换区进入内存的数量

备注:一般情况下,si、so的值都为0,如果si、so的值长时间不为0,则表示系统内存不足,需要考虑是否增加系统内存。

  • bi列 显示从块设备读入的数据总量(即读磁盘,单位KB/秒)
  • bo列 显示写入到块设备的数据总量(即写磁盘,单位KB/秒)

备注:这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。

  • in列表示在某一时间间隔中观察到的每秒设备中断数
  • cs列表示每秒产生的上下文切换次数

备注:上面这两个值越大,会看到内核消耗的CPU时间就越多,这个时候可能要考虑下为何内核的消耗会这么大,有可能有瓶颈存在。

  • us列 显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。
  • sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
  • id列 显示了CPU处在空闲状态的时间百分比
  • wa列 显示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重
  • st列 虚拟机占用的时间百分比。

1.5 sar

未安装的情况下,如下进行安装

 

linux服务器性能监控以及mysql状态查看_服务器_04

每10秒采样一次,连续采样3次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件cpu_info中

 

linux服务器性能监控以及mysql状态查看_mysql_05

其他命令:

sar -u/-q/-B/-r/-W/-b/-d

1.6 其他

  • iostat:主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。
  • iotop 是一个用来监视磁盘 I/O 使用状况的 top 类工具
  • mpstat:其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中
  • netstat:命令是一个监控TCP/IP网络的非常有用的工具
  • pidstat: sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况

2.数据库性能监控

2.1 SHOW FULL PROCESSLIST

 

linux服务器性能监控以及mysql状态查看_sed_06

  • Closing tables
    正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。
  • Connect Out
    复制从服务器正在连接主服务器。
  • Copying to tmp table on disk
    由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。
  • Creating tmp table
    正在创建临时表以存放部分查询结果。
  • deleting from main table
    服务器正在执行多表删除中的第一部分,刚删除第一个表。
  • deleting from reference tables
    服务器正在执行多表删除中的第二部分,正在删除其他表的记录。
  • Flushing tables
    正在执行FLUSH TABLES,等待其他线程关闭数据表。
  • Killed
    发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。mysql会在每次的主循环中检查kill标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill请求会在锁释放时马上生效。
  • Locked
    被其他查询锁住了。
  • Sending data
    正在处理SELECT查询的记录,同时正在把结果发送给客户端。
  • Sorting for group
    正在为GROUP BY做排序。
  • Sorting for order
    正在为ORDER BY做排序。
  • Opening tables
    这个过程应该会很快,除非受到其他因素的干扰。例如,在执ALTER TABLE或LOCK TABLE语句行完以前,数据表无法被其他线程打开。正尝试打开一个表。
  • Removing duplicates
    正在执行一个SELECT DISTINCT方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后再把结果发送给客户端。
  • Reopen table
    获得了对一个表的锁,但是必须在表结构修改之后才能获得这个锁。已经释放锁,关闭数据表,正尝试重新打开数据表。
  • Repair by sorting
    修复指令正在排序以创建索引。
  • Repair with keycache
    修复指令正在利用索引缓存一个一个地创建新索引。它会比Repair by sorting慢些。
  • Searching rows for update
    正在讲符合条件的记录找出来以备更新。它必须在UPDATE要修改相关的记录之前就完成了。
  • Sleeping
    正在等待客户端发送新请求.
  • System lock
    正在等待取得一个外部的系统锁。如果当前没有运行多个mysqld服务器同时请求同一个表,那么可以通过增加--skip-external-locking参数来禁止外部系统锁。
  • Upgrading lock
    INSERT DELAYED正在尝试取得一个锁表以插入新记录。
  • Updating
    正在搜索匹配的记录,并且修改它们。
  • User Lock
    正在等待GET_LOCK()。
  • Waiting for tables
    该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几种情况下会产生这个通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE,或OPTIMIZE TABLE。
  • waiting for handler insert
    INSERT DELAYED已经处理完了所有待处理的插入操作,正在等待新的请求。

注意:大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。

2.2show status

下面我们看几个常用的带选项的命令

 

linux服务器性能监控以及mysql状态查看_服务器_07

  • 查询当前MySQL本次启动后的运行统计时间

show status like uptime;

  • 查看本次MySQL启动后执行的select语句的次数

show status like com_select;

  • 查看本次MySQL启动后执行insert语句的次数

show [global] status like com_insert;

  • 查看本次MySQL启动后执行update语句的次数

show [global] status like com_update;

  • 查看本次MySQL启动后执行delete语句的次数

show [global] status like com_delete;

  • 查看MySQL服务器的线程信息

show status like Thread_%;

  • 查看试图连接到MySQL(不管是否连接成功)的连接数

show status like connections;

  • 查看线程缓存内的线程的数量

show status like threads_cached;

  • 查看立即获得的表的锁的次数

show status like table_locks_immediate;

  • 查看不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制

show status like table_locks_waited;

  • 查看查询时间超过long_query_time秒的查询的个数

show status like slow_queries;

系统慢查询状态检查

show global status like %slow%;

mysqldumpslow命令

慢查询日志有可能会有很多重复的sql语句,我们如何过滤呢?Mysql有自带的命令mysqldumpslow可进行查询,例下列命令可以查出访问次数最多的20个sql语句

mysqldumpslow -s c -t 20 host-slow.log

通过mysql自带profiling(性能分析)工具可以诊断某个sql各个执行阶段消耗的时间,每个执行阶段在cpu disk io等方面的消耗情况。

show variables like %profiling%;



以上是关于linux服务器性能监控以及mysql状态查看的主要内容,如果未能解决你的问题,请参考以下文章

linux 查看服务器系统资源和负载,以及性能监控

常用的Linux服务器性能查看命令

linux查看mysql状态和端口

如何监控Apache性能及调整Apache的并发连接数

监控io性能,free,ps,查看网络状态,Linux下抓包

监控io性能,free命令,ps网络命令,查看网络状态,Linux下抓包