本次我们主要一起学习两个小知识点
- Linux性能监控或者说是资源使用检查,重点熟悉
sar
- VI使用小技巧,它的功能强大到“令人发指”(褒义词),我们学习点常用的就好
-->> Linux性能分析
重点是sar,辅助其他工具
1、top
top是我们最常用的实时监控性能的工具(topas/glance)
基本用法如下:
[root@myasm ~]# top -help
top: procps version 3.2.8
usage: top -hv | -abcHimMsS -d delay -n iterations [-u user | -U user] -p pid [,pid ...]
|
P |
cpu使用资源排序 |
|
M |
内存使用资源排序 |
|
N |
pid排序显示 |
|
T |
进程使用时间累积排序 |
举例:
top #系统运行多久,整体负载情况
[root@myasm ~]# top
top - 08:07:50 up 23 days, 15:40, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 263 total, 2 running, 261 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.3%sy, 0.0%ni, 99.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4041252k total, 3139868k used, 901384k free, 439188k buffers
Swap: 4972540k total, 0k used, 4972540k free, 1966860k cached
2、sar
sar(System Activity Reporter系统活动情况报告)
是目前LINUX上最为全面的系统性能分析工具之一,
可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等方面。
SAR 常用命令如下:
[root@myasm ~]# sar -help
Usage: sar [ options ] [ <interval> [ <count> ] ]
[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
[ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ] [ -n { <keyword> [,...] | ALL } ]
[ -o [ <filename> ] | -f [ <filename> ] ] [ --legacy ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
部分输出项解释:
|
-A |
等价于 -bBcdqrRuvwWy -I SUM -I XALL -n ALL -P ALL |
|
-b |
显示I/O和传送速率的统计信息 |
|
-B |
输出内存页面的统计信息 |
|
-c |
输出进程统计信息,每秒创建的进程数 |
|
-d |
输出每一个块设备的活动信息 |
|
-i interval |
指定间隔时长,单位为秒 |
|
-p |
显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np |
|
-q |
输出进程队列长度和平均负载状态统计信息 |
|
-r |
输出内存和交换空间的统计信息 |
|
-R |
输出内存页面的统计信息 |
|
-t |
读取 /var/log/sa/saDD 的数据时显示其中记录的原始时间,如果没有这个参数使用用户的本地时间 |
|
-u |
输出CPU使用情况的统计信息 |
|
-v |
输出inode、文件和其他内核表的统计信息 |
|
-V |
输出版本号信息 |
|
-w |
输出系统交换活动信息 |
|
-W |
输出系统交换的统计信息 |
|
-y |
输出TTY设备的活动信息 |
|
-n {DEV|EDEV|NFS|NFSD|SOCK|ALL} |
分析输出网络设备状态统计信息。 |
|
DEV |
报告网络设备的统计信息 |
|
EDEV |
报告网络设备的错误统计信息 |
|
NFS |
报告 NFS 客户端的活动统计信息 |
|
NFSD |
报告 NFS 服务器的活动统计信息 |
|
SOCK |
报告网络套接字(sockets)的使用统计信息 |
|
ALL |
报告所有类型的网络活动统计信息 |
|
-x {pid|SELF|ALL} |
输出指定进程的统计信息。 |
|
pid |
用 pid 指定特定的进程 |
|
SELF |
表示 sar 自身 |
|
ALL |
表示所有进程 |
|
-X {pid|SELF|ALL} |
输出指定进程的子进程的统计信息 |
|
-I {irq|SUM|ALL|XALL} |
输出指定中断的统计信息。 |
|
irq |
指定中断号 |
|
SUM |
指定输出每秒接收到的中断总数 |
|
ALL |
指定输出前16个中断 |
|
XALL |
指定输出全部的中断信息 |
|
-P {cpu|ALL} |
输出指定 CPU 的统计信息 |
|
-o filename |
将输出信息保存到文件 filename |
|
-f filename |
从文件 filename 读取数据信息。filename 是使用-o 选项时生成的文件。 |
|
-s hh:mm:ss |
指定输出统计数据的起始时间 |
|
-e hh:mm:ss |
指定输出统计数据的截至时间,默认为18:00:00 |
举例:
##磁盘,每1秒收集一次,一共执行10次,如果配置多路径负载均衡,可以确认是否使用。
sar -dp 1 10 #p参数是为了优化输出
11:34:30 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:34:31 AM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:34:31 AM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:34:31 AM sdh 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:34:31 AM sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:34:31 AM sdf 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:34:31 AM sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:34:31 AM sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:34:31 AM sdg 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
部分输出项解释:
|
tps |
每秒从物理磁盘 I/O 的次数。多个逻辑请求会被合并为一个 I/O 磁盘请求,一次传输的大小是不确定的 |
|
rd_sec/s |
每秒读扇区的次数 |
|
wr_sec/s |
每秒写扇区的次数 |
|
avgrq-sz |
平均每次设备 I/O 操作的数据大小(扇区) |
|
avgqu-sz |
从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒) |
|
svctm |
系统处理每次请求的平均时间,不包括在请求队列中消耗的时间. |
|
%util |
I/O请求占CPU的百分比,比率越大,说明越饱和
1. avgqu-sz 的值较低时,设备的利用率较高
2. 当%util的值接近 100% 时,表示设备带宽已经占满 |
举例:
##cup
sar -u 1 2
Linux 2.6.32-573.el6.x86_64 (myasm) 02/07/2020 _x86_64_ (4 CPU)
11:56:56 AM CPU %user %nice %system %iowait %steal %idle
11:56:57 AM all 0.00 0.00 1.02 0.00 0.00 98.98
11:56:58 AM all 0.25 0.00 1.02 0.00 0.00 98.73
Average: all 0.13 0.00 1.02 0.00 0.00 98.85
部分输出项解释:
|
CPU |
all 表示统计信息为所有 CPU 的平均值。 |
|
%user |
显示在用户级别(application)运行使用 CPU 总时间的百分比。 |
|
%nice |
显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。 |
|
%system |
在核心级别(kernel)运行所使用 CPU 总时间的百分比。 |
|
%iowait |
显示用于等待I/O操作占用 CPU 总时间的百分比。
若 %iowait 的值过高,表示硬盘存在I/O瓶颈 |
|
%steal |
管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 |
|
%idle |
显示 CPU 空闲时间占用 CPU 总时间的百分比。
若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。 |
举例:
#内存 ,可以结合free 命令查看
sar -r 1 2
12:17:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
12:17:02 PM 907508 3133744 77.54 436948 1966408 2299724 25.51
12:17:03 PM 907508 3133744 77.54 436948 1966408 2299724 25.51
Average: 907508 3133744 77.54 436948 1966408 2299724 25.51
部分输出项解释:
|
kbmemfree |
可用的空闲内存数量,单位为 KB |
|
kbmemused |
已使用的内存数量(不包含内核使用的内存),单位为 KB |
|
%memused |
已使用内存的百分数 |
|
kbbuffers |
内核缓冲区(buffer)使用的内存数量,单位为 KB |
|
kbcached |
内核高速缓存(cache)数据使用的内存数量,单位为 KB |
|
kbswpfree |
可用的空闲交换空间数量,单位为 KB |
|
kbswpused |
已使用的交换空间数量,单位为 KB |
|
%swpused |
已使用交换空间的百分数 |
|
kbswpcad |
交换空间的高速缓存使用的内存数量 |
举例:
#网络
sar -n DEV 1 2 |egrep 'eth0|IFACE' #显示网卡eth0
02:53:34 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
02:53:35 PM eth0 4.04 0.00 0.27 0.00 0.00 0.00 0.00
02:53:35 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
02:53:36 PM eth0 4.04 1.01 0.24 0.29 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: eth0 4.04 0.51 0.26 0.15 0.00 0.00 0.00
部分输出项解释:
|
IFACE |
网络设备名 |
|
rxpck/s |
每秒接收的包总数 |
|
txpck/s |
每秒传输的包总数 |
|
rxbyt/s |
每秒接收的字节(byte)总数 |
|
txbyt/s |
每秒传输的字节(byte)总数 |
|
rxcmp/s |
每秒接收压缩包的总数 |
|
txcmp/s |
每秒传输压缩包的总数 |
|
rxmcst/s |
每秒接收的多播(multicast)包的总数 |
举例:
#I/O和传送速率的统计信息
sar -b 1 2
Linux 2.6.32-573.el6.x86_64 (myasm) 02/07/2020 _x86_64_ (4 CPU)
02:55:20 PM tps rtps wtps bread/s bwrtn/s
02:55:21 PM 16.49 4.12 12.37 131.96 164.95
02:55:22 PM 2.04 0.00 2.04 0.00 16.33
Average: 9.23 2.05 7.18 65.64 90.26
部分输出项解释:
|
tps |
每秒钟物理设备的 I/O 传输总量 |
|
rtps |
每秒钟从物理设备读入的数据总量 |
|
wtps |
每秒钟向物理设备写入的数据总量 |
|
bread/s |
每秒钟从物理设备读入的数据量,单位为 块/s |
|
bwrtn/s |
每秒钟向物理设备写入的数据量,单位为 块/s |
##>>制作图表
#输出到二进制文件
sar -o sarfile.log -dp 1 10
##制作成csv格式
sadf -d sarfile.log | sed 's/;/,/g' > sarfile.csv
例子:
3、iostat
iostat 用于输出CPU和磁盘I/O相关的统计信息。
[root@myasm mytest]# iostat -help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]
|
-c |
仅显示CPU统计信息。与-d选项互斥。 |
|
-d |
仅显示磁盘统计信息。与-c选项互斥。 |
|
-k |
以KB为单位显示每秒的磁盘请求数。默认单位块。 |
|
-m |
以MB为单位显示每秒的磁盘请求数。默认单位块。 |
|
-p {device|ALL} |
用于显示块设备及系统分区的统计信息。与-x选项互斥。 |
|
-t |
在输出数据时,打印搜集数据的时间。 |
|
-V |
打印版本号信息。 |
|
-x |
输出扩展信息。 |
举例:
iostat 1 2 # 设备扩展向 iostat -x 1 2
Linux 2.6.32-573.el6.x86_64 (myasm) 02/08/2020 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.18 0.00 0.20 0.06 0.00 99.56
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.20 0.35 2.23 715330 4558778
sdb 0.05 0.23 0.48 470018 975568
sdh 0.33 7.84 6.98 16014900 14244713
sdc 0.33 0.00 2.66 8820 5438344
sdf 0.43 0.24 5.25 500050 10718248
sdd 0.00 0.00 0.00 4922 80
sde 0.00 0.00 0.00 2520 0
sdg 1.61 27.44 19.89 56035885 40610996
dm-0 0.29 0.35 2.23 705530 4558728
dm-1 0.00 0.00 0.00 2744 0
dm-2 0.66 0.24 5.25 498826 10718248
dm-3 0.00 0.00 0.00 3698 80
dm-4 0.07 0.23 0.48 468794 975568
avg-cpu 部分输出项说明:
|
%user |
在用户级别运行所使用的 CPU 的百分比。 |
|
%nice |
nice 操作所使用的 CPU 的百分比。 |
|
%system |
在核心级别(kernel)运行所使用 CPU 的百分比。 |
|
%iowait |
CPU 等待硬件 I/O 所占用 CPU 的百分比。 |
|
%steal |
当管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 |
|
%idle |
CPU 空闲时间的百分比。 |
Device 部分基本输出项说明:
|
tps |
每秒钟物理设备的 I/O 传输总量。 |
|
Blk_read |
读入的数据总量,单位为块。 |
|
Blk_wrtn |
写入的数据总量,单位为块。 |
|
kB_read |
读入的数据总量,单位为KB。 |
|
kB_wrtn |
写入的数据总量,单位为KB。 |
|
MB
_read |
读入的数据总量,单位为MB。 |
|
MB
_wrtn |
写入的数据总量,单位为MB。 |
|
Blk_read/s |
每秒从驱动器读入的数据量,单位为 块/s。 |
|
Blk_wrtn/s |
每秒向驱动器写入的数据量,单位为 块/s。 |
|
kB_read/s |
每秒从驱动器读入的数据量,单位为KB/s。 |
|
kB_wrtn/s |
每秒向驱动器写入的数据量,单位为KB/s。 |
|
MB
_read/s |
每秒从驱动器读入的数据量,单位为MB/s。 |
|
MB
_wrtn/s |
每秒向驱动器写入的数据量,单位为MB/s。 |
Device 部分扩展输出项说明(iostat -x ):
|
rrqm/s |
将读入请求合并后,每秒发送到设备的读入请求数。 |
|
wrqm/s |
将写入请求合并后,每秒发送到设备的写入请求数。 |
|
r/s |
每秒发送到设备的读入请求数。 |
|
w/s |
每秒发送到设备的写入请求数。 |
|
rsec/s |
每秒从设备读入的扇区数。 |
|
wsec/s |
每秒向设备写入的扇区数。 |
|
rkB/s |
每秒从设备读入的数据量,单位为 KB/s。 |
|
wkB/s |
每秒向设备写入的数据量,单位为 KB/s。 |
|
rMB/s |
每秒从设备读入的数据量,单位为
MB
/s。 |
|
wMB/s |
每秒向设备写入的数据量,单位为
MB
/s。 |
|
avgrq-sz |
发送到设备的请求的平均大小,单位为扇区。 |
|
avgqu-sz |
发送到设备的请求的平均队列长度。 |
|
await |
I/O请求平均执行时间。包括发送请求和执行的时间。单位为毫秒。 |
|
svctm |
发送到设备的I/O请求的平均执行时间。单位为毫秒。 |
|
%util |
在I/O请求发送到设备期间,占用CPU时间的百分比。用于显示设备的带宽利用率。当这个值接近100%时,表示设备带宽已经占满。 |
4、mpstat
mpstat 输出每一个 CPU 的运行状况,为多处理器系统中的 CPU 利用率提供统计信息。
[root@myasm ~]# mpstat -help
Usage: mpstat [ options ] [ <interval> [ <count> ] ]
[ -A ] [ -I { SUM | CPU | ALL } ] [ -u ]
[ -P { <cpu> [,...] | ON | ALL } ] [ -V ]
举例:
mpstat 1 2 # 命令输出不展示,类似sar -u
mpstat -P ALL 1 2 #cpu ALL/也可选择第几个cpu(-P 2 1 2) 1秒收集一次,共计两次
07:53:30 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
07:53:31 AM all 0.00 0.00 0.26 0.26 0.00 0.00 0.00 0.00 99.49
07:53:31 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
07:53:31 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
07:53:31 AM 2 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
07:53:31 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
部分输出项解释:
|
CPU |
在多CPU系统里,每个CPU有一个ID号,第一个CPU为0。all表示统计信息为所有CPU的平均值。 |
|
%user |
显示在用户级别运行所占用CPU总时间的百分比。 |
|
%nice |
显示在用户级别,用于nice操作,所占用CPU总时间的百分比。 |
|
%sys |
显示在kernel级别运行所占用CPU总时间的百分比。注意:这个值并不包括服务中断和softirq。 |
|
%iowait |
显示用于等待I/O操作时,占用CPU总时间的百分比。 |
|
%irq |
显示用于中断操作,占用CPU总时间的百分比。 |
|
%soft |
显示用于softirq操作,占用CPU总时间的百分比。 |
|
%steal |
管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 |
|
%idle |
显示CPU在空闲状态,占用CPU总时间的百分比。 |
|
intr/s |
显示CPU每秒接收到的中断总数。 |
5、vmstat
vmstat命令是最常见的Linux/Unix监控工具,属于sysstat包。可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。
[root@myasm ~]# vmstat -help
usage: vmstat [-V] [-n] [delay [count]]
-n causes the headers not to be reprinted regularly.
-a print inactive/active page stats.
-d prints disk statistics
-p prints disk partition statistics
-t add timestamp to output
delay is the delay between updates in seconds.
unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)
count is the number of updates.
举例:
vmstat 1 2 #使用详情及具体解释可 man vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 904704 439200 1966928 0 0 5 5 4 3 0 0 100 0 0
1 0 0 904500 439200 1966928 0 0 0 0 1586 3129 0 0 100 0 0
6、iotop
iotop 默认是不安装的,如果需要,需手动安装。 安装命令
yum -y install iotop。
解释:iotop是一款开源、免费的用来监控磁盘I/O使用状况的类似top命令的工具,iotop可以监控进程的I/O信息。它是Python语言编写的,与iostat工具比较,iostat是系统级别的IO监控,而iotop是进程级别IO监控。
[root@myasm ~]# iotop -help
Usage: /usr/sbin/iotop [OPTIONS]
DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling
period. SWAPIN and IO are the percentages of time the thread spent respectively
while swapping in and waiting on I/O more generally. PRIO is the I/O priority at
which the thread is running (set using the ionice command).
Controls: left and right arrows to change the sorting column, r to invert the
sorting order, o to toggle the --only option, p to toggle the --processes
option, a to toggle the --accumulated option, q to quit, any other key to force
--version show program's version number and exit
-h, --help show this help message and exit
-o, --only only show processes or threads actually doing I/O
-b, --batch non-interactive mode
-n NUM, --iter=NUM number of iterations before ending [infinite]
-d SEC, --delay=SEC delay between iterations [1 second]
-p PID, --pid=PID processes/threads to monitor [all]
-u USER, --user=USER users to monitor [all]
-P, --processes only show processes, not all threads
-a, --accumulated show accumulated I/O instead of bandwidth
-k, --kilobytes use kilobytes instead of a human friendly unit
-t, --time add a timestamp on each line (implies --batch)
-q, --quiet suppress some lines of header (implies --batch)
举例:
#只显示正在产生io的进程或线程
iotop -o
#非交互模式,5秒执行一次,执行10次,输出到日志。如果打算输出日志,建议非交互模式
nohup iotop -b -o -n 10 -d 5 -t > /tmp/iotop.log &
7、其他工具,例如 osw,dd磁盘测速、netstat网络信息等
其他工具不做介绍,大家有兴趣的可以去测试下。
-->> VI使用小技巧
-
Green
= Essential
-
Yellow = Basic
-
Orange /
Blue = Advanced
-
Red = Expert
一些简单的命令就不说了,例如 i-->插入,上下左右键的使用(有时候还不管用)。
小知识:在unix系统,尤其hpux中,有时候回格键会各种乱码影响编写命令,可使用一下环境变量
#就进入vi的编辑模式了,回格键好用,还能使用vi 的一些小技巧
set -o vi
#而且命令还能上下翻,Ctrl+k/j/h/l 意思 上下左右,当然也能编辑
#注意,linux中,如果使用 是Esc+k/j/h/l
以下命令都是命令行模式下,也就是没按"i"
注意:vim是vi的升级版,有些命令vi无法操作,如果打算使用更高级的方法,推荐使用vim
|
操作命令 |
解释 |
|
kjhl |
上下左右键 |
|
gg/G |
文本顶头/文本末尾 #aix/hpux gg命令失效.
nG 选择第几行,可结合显示行号 :set nu,或者 : 行号 |
|
H/L |
当前屏幕的首行/最后一行 |
|
:%s/test/tt/g |
全局替换字符串test,替换后tt。如有特殊字符需转义 |
|
ZZ/ZQ |
保存退出/不保存退出 |
|
dd/D |
dd删除一行,D删除一行内容(变成空行). dd前边加数字,例如2dd,从光标起始位置向下删除2行。 |
|
:set nu |
显示行数 |
|
r/R |
替换当前字符/替换当前行 |
|
cw/C=cW |
替换当前单词/替换光标所在一行 |
|
o/O |
光标下新建一行进入编辑模式/光标上新建一行进入编辑模式 |
|
5yyp |
复制光标开始5行,并粘贴到光标的下一行 |
|
ci[')"{..] |
组合命令,替换到什么位置结束,例如ci) 从'('光标开始,到')'结束,全部替换。也可以使用di/yi/vi等 |
|
Ctrl+B/F/E/Y |
上下翻页、上下滚动 |
|
t/T&&f/F |
光标所在行 向后直到某个字符前/向前直到某个字符前
光标所在行 向后查找某个字符/向前查找某个字符 |
|
其他 |
像行位还是插入A,光标后边插入a,一直到行位$,行首^,oO uU 等一些经常使用的命令,建议熟悉,操作起来很方便 |
分享到此结束,谢谢。
如有其它问题,我们可以继续探讨。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29487349/viewspace-2696533/
,如需转载,请注明出处,否则将追究法律责任。