Linux系统如何监控TPS?

在Linux系统中,TPS(Transactions Per Second,每秒事务数)是衡量系统事务处理能力的关键指标,尤其适用于数据库、文件系统、消息队列等场景的事务处理性能监控,事务可以理解为系统中完成的原子操作(如磁盘I/O、数据库提交、网络请求等),TPS越高说明系统在单位时间内能处理的事务越多,性能越好,本文将详细介绍Linux环境下监控TPS的常用工具、方法及实践技巧。

linux如何监控tps

TPS的定义与监控意义

TPS的核心是“事务”,即系统中不可分割的最小工作单元,在文件系统中,一次“创建文件+写入数据+关闭文件”可能算一个事务;在数据库中,一次“INSERT+COMMIT”也是一个事务,监控TPS的意义在于:

  1. 性能瓶颈定位:通过TPS变化结合CPU、内存、I/O等指标,判断系统是否因磁盘性能、网络延迟或资源竞争导致事务处理能力下降;
  2. 容量规划:根据历史TPS趋势,预测未来资源需求(如磁盘升级、数据库分库分表);
  3. 异常检测:TPS突降可能意味着磁盘故障、进程阻塞或服务异常,需及时告警。

Linux监控TPS的常用工具及实践

Linux提供了多种原生及第三方工具用于监控TPS,不同工具侧重不同场景(如系统级、进程级、应用级),需根据需求选择。

iostat:磁盘I/O级TPS监控

iostat是sysstat工具包的一部分,专注于磁盘I/O性能统计,可直接显示磁盘设备的TPS(即每秒发生的I/O操作数)。

安装与使用

# 安装sysstat工具包(CentOS/RHEL)
yum install sysstat  
# Ubuntu/Debian
apt-get install sysstat  
# 实时监控磁盘TPS(每秒刷新一次)
iostat -d -x -k 1  

参数说明

  • -d:显示磁盘统计信息;
  • -x:显示扩展统计(包括await、util等关键指标);
  • -k:以KB为单位显示数据量;
  • 1:每秒刷新一次。

输出解读

Device:         tps    kB_read/s    kB_wrtn/s    kB_dscd/s    %util
sda            125.34       1024.50       856.30          0.00     15.67
sdb             89.21        512.20      1024.80          0.00     22.34
  • tps:每秒向设备发起的I/O请求数(即磁盘级TPS);
  • %util:磁盘I/O时间占比(超过70%可能意味着磁盘瓶颈)。

适用场景:监控磁盘整体I/O性能,判断是否因磁盘读写能力不足导致TPS下降。

vmstat:系统级I/O压力监控

vmstat是虚拟内存统计工具,可显示进程、内存、I/O等系统级状态,其中bi(块设备读入)和bo(块设备写出)反映系统I/O压力,虽不直接显示TPS,但可辅助分析TPS变化原因。

使用方法

# 每秒刷新一次,显示系统状态
vmstat 1  

输出关键指标

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  2      0 102400  51200 204800    0    0   512  1024  1000  2000  10 20 60 10  0
  • b:阻塞的进程数(等待I/O的进程,若持续较高说明I/O瓶颈);
  • bi/bo:每秒块设备读入/写出数据量(单位为块,1块=1024字节),与TPS正相关(I/O操作越多,bi/bo越大)。

适用场景:快速判断系统是否存在I/O阻塞(b>0且持续)或I/O压力过大(bi+bo飙升)。

linux如何监控tps

sar:历史TPS趋势分析

sar(System Activity Reporter)同样是sysstat工具包的一部分,可收集并存储系统历史数据,适合分析TPS的长期趋势。

使用方法

# 实时监控磁盘TPS(每秒刷新,连续5次)
sar -d 1 5  
# 查看历史TPS数据(如昨天18点的磁盘I/O)
sar -d -s 18:00:00 -e 18:00:01 -f /var/log/sa/sa15

输出解读

Linux 5.4.0-91-generic (ubuntu)     08/20/2023  _x86_64_    (2 CPU)
10:00:01         DEV       tps    rd_sec/s    wr_sec/s  avgrq-sz  avgqu-sz   await r_await w_await  svctm  %util
10:00:02         sda      150.23      1024.50     2048.00    20.48     1.23    8.20   5.10   10.30   6.50  97.65
  • rd_sec/s/wr_sec/s:每秒读/写扇区数(1扇区=512字节),与TPS结合可判断I/O类型(读密集型还是写密集型)。

适用场景:分析TPS随时间的变化趋势,如业务高峰期TPS是否达标、磁盘性能衰减情况。

iotop:进程级I/O监控

iotop以top风格实时显示每个进程的I/O读写情况,可定位到具体的高I/O进程(如数据库、日志写入进程),辅助分析TPS异常原因。

安装与使用

# 安装iotop
yum install iotop  # CentOS/RHEL
apt-get install iotop  # Ubuntu/Debian
# 实时显示进程I/O(只显示有I/O操作的进程)
iotop -o -p [PID]  # 可指定进程PID,不指定则显示所有进程

输出关键指标

Total DISK READ :       1024.00 K/s | Total DISK WRITE :       2048.00 K/s
Actual DISK READ:       1024.00 K/s | Actual DISK WRITE:       2048.00 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 1234 be/3 mysql     1024.00 K/s  2048.00 K/s  0.00 %  5.23 % /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
 5678 be/1 nginx        0.00 K/s   512.00 K/s  0.00 %  1.23 % nginx: worker process
  • DISK READ/DISK WRITE:进程每秒磁盘读/写量;
  • IO%:进程I/O时间占比(越高说明进程对I/O的占用越强)。

适用场景:定位导致TPS异常的具体进程(如某个SQL查询频繁刷盘、日志进程疯狂写入)。

dstat:综合性能监控

dstat是一款多功能系统统计工具,可整合CPU、内存、磁盘、网络等指标,同时支持TPS监控,适合快速查看系统整体性能。

安装与使用

# 安装dstat
yum install dstat  # CentOS/RHEL
apt-get install dstat  # Ubuntu/Debian
# 监控磁盘TPS及读写速率
dstat -d --disk-util

输出解读

linux如何监控tps

----total-cpu-usage---- -dsk/total- -dsk/sda- --most-intensive-
 usr sys idle iowait  | read  writ   read  writ  | process      
 10  20  60  10      |1024K 2048K  512K 1024K  | mysqld       
  • dsk/total:所有磁盘的TPS及读写速率;
  • dsk/sda:指定磁盘(如sda)的TPS及读写速率。

适用场景:需要同时监控TPS与其他系统指标(如CPU、内存)时,快速定位瓶颈。

不同场景下的TPS监控策略

文件系统TPS监控

文件系统(如ext4、XFS)的TPS主要与元数据操作(如inode分配、目录更新)相关,可通过以下工具细化监控:

  • ext4:使用debugfs查看文件系统状态:
    debugfs -R "stats /dev/sda1" /dev/sda1

    输出中的Transaction blocks可反映事务处理量。

  • XFS:使用xfs_io查看日志性能:
    xfs_io -c "stat" /mnt/xfs_data

数据库TPS监控

数据库(如MySQL、PostgreSQL)的TPS通常指每秒事务提交数(COMMIT),需结合数据库自身工具监控:

  • MySQL:通过SHOW GLOBAL STATUS获取事务相关计数器:
    SHOW GLOBAL STATUS LIKE 'Com_commit';

    计算TPS:(当前Com_commit值 - 上次采样值) / 时间差(秒)

  • PostgreSQL:使用pg_stat_activity视图:
    SELECT count(*) FROM pg_stat_activity WHERE state='active' AND query NOT LIKE '%pg_stat_activity%';

TPS数据分析与优化

TPS异常判断

  • TPS过高:若磁盘%util超过70%,且await(平均I/O等待时间)超过10ms,说明磁盘已达瓶颈,可考虑升级SSD、调整RAID级别或优化应用I/O逻辑(如批量写入替代单条写入)。
  • TPS突降:检查b(阻塞进程数)是否突增,或iotop中是否有异常高I/O进程(如死循环写入),同时查看/var/log/messagesdmesg确认是否有磁盘错误。

自动化监控与告警

使用Prometheus+Grafana或Zabbix可实现TPS自动化监控与告警:

  • Prometheus:通过node_exporter暴露iostat指标(如node_disk_io_time_seconds_total),在Grafana中创建仪表盘,设置TPS低于阈值时触发告警。
  • Zabbix:创建自定义item,通过iostat -d命令解析TPS,设置触发器(如TPS连续5分钟低于100)。

相关问答FAQs

Q1:如何判断Linux系统当前TPS是否处于合理范围?
A:TPS合理范围需结合硬件配置和应用场景判断:

  • 机械硬盘(HDD):一般TPS在100-500之间,若超过500且%util>70%,说明磁盘已满负荷;
  • 固态硬盘(SSD):顺序读写TPS可达5000+,随机读写TPS在1000+,若远低于此值需检查I/O模式(如是否开启AHCI);
  • 数据库场景:MySQL InnoDB引擎TPS通常在1000-10000(取决于配置),若TPS<100需检查事务隔离级别、锁竞争或SQL效率。

同时需结合iowaitvmstat中的wa列):若iowait>30%,说明I/O已成为瓶颈,TPS可能偏低。

Q2:使用iostat监控TPS时,await指标过高说明什么?如何优化?
A:await指每次I/O操作的平均等待时间(单位:ms),计算公式为await = (io_time * 1000) / (total_operations),若await超过10ms,说明磁盘响应慢,可能原因及优化措施如下:

  • 原因1:磁盘碎片(仅ext4/XFS需在线整理):
    # ext4碎片整理(需卸载文件系统或使用在线工具e4defrag)
    e4defrag /dev/sda1
    # XFS碎片整理
    xfs_fsr /mnt/xfs_data
  • 原因2:I/O调度算法不当
    查看当前调度算法:cat /sys/block/sda/queue/scheduler,若为deadlinenoop(适合SSD),可调整为none(完全交给SSD自身调度):

    echo none > /sys/block/sda/queue/scheduler
  • 原因3:应用I/O方式不合理
    避免频繁小文件I/O(如日志每秒刷盘),可调整为批量写入(如每10秒刷一次);数据库场景可调整innodb_flush_log_at_trx_commit参数(从1改为0,但会丢失事务安全性)。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33921.html

(0)
酷番叔酷番叔
上一篇 2025年10月1日 18:02
下一篇 2025年10月1日 18:24

相关推荐

  • Linux服务安装的具体操作步骤和方法是什么?

    Linux作为开源操作系统,其服务管理是系统运维的核心环节,服务的安装、配置与直接关系到系统功能的稳定运行,本文将详细讲解Linux服务的安装方法,涵盖包管理器安装、源码编译安装及服务配置管理,帮助用户高效完成服务部署,服务安装前需做好准备工作:首先更新系统软件包列表,确保基础环境最新,如在Ubuntu/Deb……

    2025年10月5日
    500
  • Linux如何更新Python版本?

    在Linux系统中更新Python版本是许多开发者和系统管理员经常需要进行的操作,不同Linux发行版(如Ubuntu、CentOS、Debian、Arch Linux等)和不同的使用场景(如系统Python依赖、开发环境需求等)可能需要采用不同的更新方法,本文将详细介绍几种主流的Python更新方式,包括通过……

    2025年9月24日
    1600
  • Linux下如何编写DLL动态链接库文件?

    在Linux操作系统中,并没有Windows环境下的动态链接库(DLL)文件格式,但Linux提供了功能类似的共享库(Shared Object,文件后缀为.so),它允许程序在运行时动态加载和链接,实现代码复用和模块化开发,编写Linux下的共享库(即“Linux DLL”)需要遵循特定的编译和链接流程,本文……

    2025年10月1日
    1500
  • Linux如何安全获取root权限?

    通过 sudo 命令临时获取root权限(推荐)适用场景:执行单条需要root权限的命令,优势:安全可控,系统默认记录操作日志,步骤:在终端输入命令前添加 sudo: sudo 你的命令sudo apt update # 示例:更新软件列表输入当前用户的密码(输入时密码不可见,输入后按回车),权限有效期:默认1……

    2025年7月2日
    4800
  • juicessh如何连接Linux远程服务器?操作步骤是什么?

    要通过JuiceSSH连接Linux服务器,需完成服务器端配置、客户端安装及连接设置等步骤,以下是详细操作指南:准备工作在连接前,需确保Linux服务器和Android设备满足以下条件:Linux服务器端配置开启SSH服务:Linux服务器需安装并运行SSH服务,若未安装,可通过以下命令安装(以Ubuntu/D……

    2025年10月7日
    1500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信