linux系统运行状态检查
目录
1 CPU状态检查
1.1 运行时间
信息:
运行时间 / Uptime
工具:
uptime
示例:
[root@paris ~]# uptime
17:03:12 up 2 days, 20:08, 7 users, load average: 0.06, 0.05, 0.00
处理方法:
如小于预期,则深究
1.2 CPU占用率
信息:
CPU占用率 / CPU Usage
工具:
sar -P ALL 2 5
#每隔两秒对CPU的占用率采样一次,连续采样五次,最后打印出CPU总的以及每个核的占用情况
示例:
[root@TVLD2 ~]# sar -P ALL 2 5
Linux 2.6.18-128.el5 (TVLD2) 10/20/2018
Average: CPU %user %nice %system %iowait %steal %idle
Average: all 17.42 0.00 17.92 0.00 0.00 64.66
Average: 0 19.20 0.00 4.80 0.00 0.00 76.00
Average: 1 23.30 0.00 8.30 0.00 0.00 68.40
Average: 2 6.20 0.00 45.40 0.00 0.00 48.40
Average: 3 21.08 0.00 13.09 0.00 0.00 65.83
计算方法:
CPU占用率 = 100% - %idle
处理方法:
如与预期不符或高于90%,则深究
1.3 单核占用率
信息:
单核占用率 / Core Usage
工具:
sar -P ALL 2 5
#每隔两秒对CPU的占用率采样一次,连续采样五次,最后打印出CPU总的以及每个核的占用情况
计算方法:
CPU单核占用率 = 100% - 单核%idle
处理方法:
如与预期不符或高于90%,则深究
2 内存状态检查
2.1 内存占用率
信息:
内存占用率 / Memory Usage
工具:
free
示例:
[root@TVLD2 ~]# free
total used free shared buffers cached
Mem: 503232 7304 0 98656 297196
-/+ buffers/cache: 403156
Swap: 1048568 0 1048568
计算方法:
内存占用率 = (used - buffers – cached) / total * 100%
处理方法:
如与预期不符或高于90%,则深究
2.2 交换分区占用率
信息:
交换分区 / Swap Usage
工具:
free
示例:
[root@TVLD2 ~]# free
total used free shared buffers cached
Mem: 510536 503232 7304 0 98656 297196
-/+ buffers/cache: 107380 403156
Swap: 1048568
计算方法:
内存占用率 = (swap used / swap total ) * 100%
处理方法:
如与预期不符或高于0%,则深究
3 磁盘状态检查
3.1 系统磁盘容量占用率
信息:
系统磁盘容量占用率 / Sys Disk Usage
工具:
df -h
示例:
[root@VODLD ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md0 902G 32G 824G 4% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/md1 9.9T 7.3T 2.2T 78% /opt/fonsview/NE/vodld/data
统计方法:
根据设备名进行统计
/dev/md0 4%
/dev/md1 78%
处理方法:
如与预期不符或高于95%,则深究
3.2 磁盘健康状态
信息:
磁盘健康状态 / Health Check
工具:
fdisk -l #获取磁盘设备名列表
smartctl -H /dev/sdX #查看具体磁盘的健康状态
示例:
[root@london data]# smartctl -H /dev/sdc
smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
[root@london data]# smartctl -Hc /dev/sda
smartctl 5.40 2010-10-16 r3189 [i686-pc-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 035 030 051 Pre-fail Always FAILING_NOW 96231
取值:
PASSED 表示磁盘健康
FAILED 表示磁盘不健康
统计方法:
根据设备名显示磁盘健康状态
处理方法:
如果FAILED!,立即更换磁盘
3.3 磁盘读速率
信息:
磁盘10秒内的平均读速率 / Read Rate
工具:
sar -dp 2 5
示例:
[root@london data]# sar -dp 2 5
Linux 2.6.18-128.el5 (london.sz.fonsview.com) 10/20/2018
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sda 7.60 420.80 70.40 64.63 0.04 5.50 4.43 3.37
Average: sda1 7.60 420.80 70.40 64.63 0.04 5.50 4.43 3.37
Average: sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdb 7.40 444.80 70.40 69.62 0.04 4.95 3.85 2.85
Average: sdb1 7.40 444.80 70.40 69.62 0.04 4.95 3.85 2.85
Average: sdb2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdc 16.20 16519.40 0.00 1019.72 0.14 8.37 7.38 11.96
Average: sdd 15.50 15872.00 0.00 1024.00 0.15 9.86 7.59 11.76
Average: sde 15.60 15974.40 0.00 1024.00 0.13 8.19 7.47 11.66
Average: sdf 15.00 15261.90 0.00 1017.46 0.13 8.79 7.67 11.51
计算方法:
磁盘读速率 = (rd_sec/s) / 2
统计方法:
显示每块磁盘10秒内的平均读速率
处理方法:
如与预期不符或大于50MB/s,则深究
3.4 磁盘写速率
信息:
磁盘10秒内的平均写速率 / Write Rate
工具:
sar -dp 2 5
示例:
[root@london data]# sar -dp 2 5
Linux 2.6.18-128.el5 (london.sz.fonsview.com) 10/20/2018
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sda 7.60 420.80 70.40 64.63 0.04 5.50 4.43 3.37
Average: sda1 7.60 420.80 70.40 64.63 0.04 5.50 4.43 3.37
Average: sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdb 7.40 444.80 70.40 69.62 0.04 4.95 3.85 2.85
Average: sdb1 7.40 444.80 70.40 69.62 0.04 4.95 3.85 2.85
Average: sdb2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdc 16.20 16519.40 0.00 1019.72 0.14 8.37 7.38 11.96
Average: sdd 15.50 15872.00 0.00 1024.00 0.15 9.86 7.59 11.76
Average: sde 15.60 15974.40 0.00 1024.00 0.13 8.19 7.47 11.66
Average: sdf 15.00 15261.90 0.00 1017.46 0.13 8.79 7.67 11.51
计算方法:
磁盘写速率 = (wr_sec/s) / 2
统计方法:
显示每块磁盘10秒内的平均写速率
处理方法:
如与预期不符或大于40MB/s,则深究
3.5 磁盘每秒IO数
信息:
磁盘每秒IO数 / TPS
工具:
sar -dp 2 5
示例:
[root@london data]# sar -dp 2 5
Linux 2.6.18-128.el5 (london.sz.fonsview.com) 10/20/2018
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sda 7.60 420.80 70.40 64.63 0.04 5.50 4.43 3.37
Average: sda1 7.60 420.80 70.40 64.63 0.04 5.50 4.43 3.37
Average: sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdb 7.40 444.80 70.40 69.62 0.04 4.95 3.85 2.85
Average: sdb1 7.40 444.80 70.40 69.62 0.04 4.95 3.85 2.85
Average: sdb2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdc 16.20 16519.40 0.00 1019.72 0.14 8.37 7.38 11.96
Average: sdd 15.50 15872.00 0.00 1024.00 0.15 9.86 7.59 11.76
Average: sde 15.60 15974.40 0.00 1024.00 0.13 8.19 7.47 11.66
Average: sdf 15.00 15261.90 0.00 1017.46 0.13 8.79 7.67 11.51
统计方法:
显示每块磁盘10秒内的平均每秒IO数
处理方法:
如与预期不符或超过50,则深究
3.6 磁盘使用率
信息:
磁盘使用率 / Disk Utilization
工具:
sar -dp 2 5
示例:
[root@london data]# sar -dp 2 5
Linux 2.6.18-128.el5 (london.sz.fonsview.com) 10/20/2018
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sda 7.60 420.80 70.40 64.63 0.04 5.50 4.43 3.37
Average: sda1 7.60 420.80 70.40 64.63 0.04 5.50 4.43 3.37
Average: sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdb 7.40 444.80 70.40 69.62 0.04 4.95 3.85 2.85
Average: sdb1 7.40 444.80 70.40 69.62 0.04 4.95 3.85 2.85
Average: sdb2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdc 16.20 16519.40 0.00 1019.72 0.14 8.37 7.38 11.96
Average: sdd 15.50 15872.00 0.00 1024.00 0.15 9.86 7.59 11.76
Average: sde 15.60 15974.40 0.00 1024.00 0.13 8.19 7.47 11.66
Average: sdf 15.00 15261.90 0.00 1017.46 0.13 8.79 7.67 11.51
计算方法:
磁盘使用率 = %util
统计方法:
显示每块磁盘10秒内的平均使用率
处理方法:
如与预期不符或超过70%,则深究
4 网卡状态检查
4.1 网卡链路状态
信息:
网卡链路状态 / Link Status
取值:
yes 表示检测到链路
no 表示未检测到链路
工具:
ip addr #获取网卡设备名列表
ethtool ethX #查看具体网卡的状态
示例:
[root@paris root]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbag
Wake-on: g
Current message level: 0x00000001 (1)
Link detected: yes
统计方法:
显示每块网卡的链路状态
处理方法:
如与预期不符且未检测到链路,则
a.检查网线是否脱离网口
b.检查网线的另一头是否脱离网口
c.检查网线的另一头的机器是否关机
4.2 网卡启用状态
信息:
网卡启用状态 / NIC Status
取值:
UP 表示网卡已启用
DOWN 表示网卡未启用
工具:
ifconfig ethX #查看具体网卡的状态
示例:
[root@london data]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:15:17:83:F1:58
inet addr:172.16.201.210 Bcast:172.16.201.255 Mask:255.255.255.0
inet6 addr: fe80::215:17ff:fe83:f158/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10223856 errors:0 dropped:0 overruns:0 frame:0
TX packets:1573906 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10068100799 (9.3 GiB) TX bytes:1008851902 (962.1 MiB)
Memory:b8820000-b8840000 [root@Sofia3 data]# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:25:90:1B:F1:5F
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Memory:fbde0000-fbe00000
统计方法:
显示每块网卡的启用状态
处理方法:
如与预期不符且网卡DOWN,则尝试ifup该网口
4.3 网卡速率
信息:
网卡速率 / Speed
取值范围:
1000Mb/s
100Mb/s
10Mb/s
Unknown! 表示网卡未启用
工具:
ip addr #获取网卡设备名列表
ethtool ethX #查看具体网卡的速率
示例:
[root@paris root]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbag
Wake-on: g
Current message level: 0x00000001 (1)
Link detected: yes [root@zurich ~]# ethtool eth1
Settings for eth1:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised auto-negotiation: Yes
Speed: Unknown! (0)
Duplex: Half
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: g
Wake-on: g
Current message level: 0x000000ff (255)
Link detected: no
统计方法:
显示每块网卡的速率
处理方法:
如与预期不符,则重启该网口,即先ifdown,再ifup该网口
4.4 网卡双工状态
信息:
网卡双工状态 / Duplex
取值:
Full 表示全双工
Half 表示半双工
工具:
ip addr #获取网卡设备名列表
ethtool ethX #查看具体网卡的速率
示例:
[root@paris root]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbag
Wake-on: g
Current message level: 0x00000001 (1)
Link detected: yes
统计方法:
显示每块网卡双工状态
处理方法:
如与预期不符,则深究
4.5 网卡发送速率
信息:
网卡发送速率 / txbyt/s
工具:
sar -n DEV 2 5
示例:
[root@london data]# sar -n DEV 2 5
Linux 2.6.18-128.el5 (london.sz.fonsview.com) 10/20/2018
Average: IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 5226.50 10013.40 383753.60 15166070.80 0.00 0.00 40.10
Average: eth1 1394.40 7602.00 96752.80 11527150.00 0.00 0.00 0.10
Average: eth2 4479.60 4537.30 307995.40 6881234.20 0.00 0.00 0.10
Average: eth3 3038.80 11563.80 212539.60 17536266.00 0.00 0.00 0.10
Average: eth4 2696.60 7827.60 184527.00 11871126.00 0.00 0.00 0.10
Average: eth5 7789.00 18856.90 534560.60 28600892.20 0.00 0.00 0.10
计算方法:
网卡发送速率 = txbyt/s * 8
统计方法:
显示每块网卡的发送速率
4.6 网卡接收速率
信息:
网卡接收速率 / rxbps
工具:
sar -n DEV 2 5
示例:
[root@london data]# sar -n DEV 2 5
Linux 2.6.18-128.el5 (london.sz.fonsview.com) 10/20/2018
Average: IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 5226.50 10013.40 383753.60 15166070.80 0.00 0.00 40.10
Average: eth1 1394.40 7602.00 96752.80 11527150.00 0.00 0.00 0.10
Average: eth2 4479.60 4537.30 307995.40 6881234.20 0.00 0.00 0.10
Average: eth3 3038.80 11563.80 212539.60 17536266.00 0.00 0.00 0.10
Average: eth4 2696.60 7827.60 184527.00 11871126.00 0.00 0.00 0.10
Average: eth5 7789.00 18856.90 534560.60 28600892.20 0.00 0.00 0.10
计算方法:
网卡接收速率 = rxbyt/s * 8
统计方法:
显示每块网卡的接收速率
5 其他检查
5.1 CORE文件个数
信息:
CORE文件个数 / Core Files
工具:
ls -l /core*|wc -l
示例:
[root@paris data]# ls -l /core*|wc -l
2
统计方法:
显示CORE文件个数
处理方法:
应用程序曾经出错重启,请深究。
5.2 时间同步状态
信息:
时间同步状态 / NTP Syn Status
工具:
ntpq -p
示例:
同步成功:标有*号的行表示当前使用的服务器
[root@Sofia2 info_collector]# ntpq -pn
remote refid st t when poll reach delay offset jitter
=========================================================================
*221.7.129.79 210.72.145.44 2 u 40 64 37 107.377 21.054 9.256
210.72.145.44 .ACTS. 1 u 109 16 12 82.456 11.099 3.804
NTP服务未启动:
[root@Sofia2 info_collector]# ntpq -pn
ntpq: read: Connection refused
同步不成功:
[root@Sofia2 info_collector]# ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
221.7.129.79 210.72.145.44 2 u 22 64 7 116.205 37.519 18.623
210.72.145.44 .INIT. 16 u - 64 0 0.000 0.000 0.000
202.120.2.101 61.153.197.226 3 u 24 64 7 52.665 112.022 11.560
133.100.11.8 .GPS. 1 u 21 64 5 335.591 12.114 4.222
66.92.68.246 .INIT. 16 u - 64 0 0.000 0.000 0.000
取值:
SYN: 同步
UNSYN: 未同步
统计方法:
显示CORE文件个数
处理方法:
恢复正常时间同步
5.3 系统log日志查看
信息:
kernel 是否有Erro
工具:
vim /var/log/messages
事例:
主要查看message日志的 kernel 和应用进程日志中是否有 erro 和异常的显示,最常见的第三方应用软件的相关如UCARP VRRP NTP等状态变更都会有显示,当磁盘、主板在出现异常的时候也会有显示。
linux系统运行状态检查的更多相关文章
- 在linux系统下检查postgresql数据库安装,登录数据库及简单的查看数据库
1. 检查Linux系统是否安装数据库 首先查看自己的系统是否安装了postgresql数据库命令如下: rpm -qa | grep postgresql 如果没有显示查询结果(如下图所示)说 ...
- linux系统健康检查脚本
#!/bin/bash echo "You are logged in as `whoami`"; if [ `whoami` != root ]; then echo " ...
- 阿里云Linux系统基线检查优化
1.用户权限配置文件的权限优化 描述:设置用户权限配置文件的权限 操作时建议做好记录或备份 chown root:root /etc/passwd /etc/shadow /etc/group /et ...
- Linux 系统状态检测命令
介绍快速查看Linux系统运行状态的能力(网络网卡.系统内核.系统负载.内存使用情况.启用终端数量.历史登录记录.命令执行记录.救援诊断)等命令使用方法 1.ifconfig 用于获取网卡配置和网络 ...
- Linux入门教程:如何检查Linux系统的最后重启时间
问题: 是否有一个命令可以快速地检查系统已经运行了多久? 也就是我怎么知道Linux系统最后的重启时间? 有许多方法来查询系统最后的重启时间. 方法一 第一种方法是使用last命令. $ last r ...
- linux系统ssh远程连接检查脚本
脚本用于检查Linux系统云服务器出现的常见远程不能连接问题,脚本可以提前放到服务器里,出现问题时可以web vnc登陆上去执行试试. 附:管理控制台终端web vnc 方式登录,参考:http:// ...
- linux创建用户与登录提示motd与系统运行状态目录
目录 一:登录提示文件 二:linux创建用户 三:系统日志目录 四:保存系统运行状态的目录 一:登录提示文件 登录成功之后显示的信息. 进入文本编辑 /etc/motd 文件中内容,会在用户登录系统 ...
- [转]linux 系统监控、诊断工具之 IO wait
1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器 ...
- Linux系统学习笔记:文件描述符标志
文件描述符标志的概念 文件描述符标志(目前就只有一个close-on-exec): 它仅仅是一个标志,当进程fork一个子进程的时候,在子进程中调用了exec函数时就用到了这个标志.意义是执行exec ...
随机推荐
- VueRouter 源码深度解析
VueRouter 源码深度解析 该文章内容节选自团队的开源项目 InterviewMap.项目目前内容包含了 JS.网络.浏览器相关.性能优化.安全.框架.Git.数据结构.算法等内容,无论是基础还 ...
- Xamarin.Android 调用本地相册
调用本地相册选中照片在ImageView上显示 代码: using System; using System.Collections.Generic; using System.Linq; using ...
- 关于resin的illegal utf8 encoding at (190)解决方式
最近在项目开发中,出现了编码异常,内容如下:- illegal utf8 encoding at (190)com.caucho.jsp.JspParseException: illegal utf8 ...
- 如何从GitHub仓库clone项目
自己也已经多次接触了git了,但是因为工作用svn,自己平时也很少用git,所以每次都是用的时候可能还可以,等过一段时间再来用的时候,就又忘得差不多了,所以索性自己写个博客,自己记得自己也好懂,而且熟 ...
- TCP/IP 笔记 - 域名解析和域名系统
由于IP地址的烦琐导致的记忆和使用困难,互联网支持使用主机名称来识别包括客户机和服务器在内的主机.同时为了使用一系列协议,主机名称通过称为"名称解析"的过程转换成对应IP地址. 互 ...
- 常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.
常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战. PS:上面是操作.最后是原理 一丶需要了解的API 使用全局钩子注入.我们需要了解几个WindowsAPI. ...
- Apache Kafka: 优化部署的10个最佳实践
原文作者:Ben Bromhead 译者:江玮 原文地址:https://www.infoq.com/articles/apache-kafka-best-practices-to-opti ...
- JavaWeb之Maven一
Maven和C#的nuget类似,可以通过设置就能引入框架等第三方,方便又省事.Java中使用Maven来管理第三方.今天尝试着配置了一下. 一.JDK的安装 关于JDK的安装可以查看百度经验,设置P ...
- python取余
a=-7,b=3, a % b = 2 #取余 a-((a/b)*b) a / b= -3 #整除 int(math.floor(-7/3.0))
- MVC四大筛选器—ActionFilter&ResultedFilter
AuthorizeFilter筛选器 在Action的执行中包括两个重要的部分,一个是Action方法本身逻辑代码的执行,第二个就是Action方法的筛选器的执行. MVC4中筛选器都是以AOP(面向 ...