1 什么决定操作系统的运行速度
1)CPU
计算、逻辑处理,CPU 只在内存中工作—-最影响电脑性能
2)内存
读取数据(临时),相当于闪存—-其次影响电脑性能
3)磁盘
存储数据——-最次影响电脑性能
4)其他
① 显卡
决定清晰度
②SSD(固态硬盘)
为什么 SSD 比机械硬盘快,分布式写操作,传统机械硬盘是逻辑写
③swap
是磁盘开辟出来的,SWAP 用的是磁盘的空间。把磁盘中的一片空间拿出来,映射为内存
④ 高速缓存
内存和 CPU 之间的一块区域,高速缓存比内存速度还快,集成在 cpu 上。CPU 的工作速度高,但内存的工作速度相对较低,为了解决这个问题,通常使用高速缓存,高速缓存的存取速度介于 CPU 和内存之间。系统将一些 CPU 在近几个时间段经常访问的内容存入高速缓冲,当 CPU 需要使用数据时,先在高速缓存中找,如果找到,就不必访问内存了,找不到时,再找内存,这样就在一定程度上缓解了由于主存速度低造成的 CPU“停工待料”的情况。
⑤ 虚拟内存
特别特别慢,现在内存很便宜,基本不用虚拟内存了,直接用物理内存
⑥buffer
缓冲,文件要写磁盘的,磁盘写,频繁要往磁盘写的文件
⑦cache
缓存,介于 cpu 与内存之间的东西,缓存是从磁盘到内存,磁盘读
2 CPU、内存、磁盘间的关系
CPU:相当于车间里面的工人
内存:相当于车间
硬盘:相当于仓库
工厂里只有工人干活,工人在车间干活,干活需要的材料放在仓库
提高生产效率的方法:首先是加工人,相当于增加 CPU 的颗粒数,工厂里的工人数越多,生产效率就越高;其次就是提高工人的操作熟练度,相当于增加 CPU 的频率,即切片数;再次是在工人没法增加的情况下,把车间加大,也就是增加内存也能提高生产效率,车间增大后,一次性从仓库取货变多,减少车间与仓库的交互次数,节省时间,且一次性加工的货物数量也能增多;最后就是把仓库提升一下,把仓库搬离车间近一点,也就是弄一个高度通道,提升磁盘访问速度。
3 虚拟内存和物理内存的区别
虚拟内存是在硬盘上开辟一块区间当做内存使用,但实际虚拟内存还是硬盘,所用虚拟内存很慢,现在基本不用。
4 4 核 CPU,同时开 8 个进程为什么会不卡?
卡不卡跟 CPU 的频率有关,CPU 的频率决定了 CPU 进行时间切片的片数。假设 1s 内把 CPU 切成 1000 片,时间片先给 A 任务,再给 B 任务,再给 C 任务…如果后面再没有排队的任务了,后面的时间片就再重新给 A 任务,B 任务,C 任务…如果在这一个时间片内任务完成了,则不会卡,如果在分配的时间片内没完成,由于时间片都已经分出去了,现在就只能等待了,就会感觉到卡。
5 linux 下查看 cpu、内存信息
1)查看 CPU 颗粒数
输入 top 命令再按 1,如下为单核
2)查看 CPU 频率
cat /proc/cpuinfo,如下 cpu 是 2.6GHZ
3)查看内存信息
6 负载、CPU 使用率
1)load average
当前正在 CPU 调动的进程以及正在等待 io 的进程之和。top、uptime 命令都可看负载信息
2)系统 CPU
系统内核调度时才会使用系统 CPU,磁盘 io,进程上下文切换都会调用系统内核。
3)用户 CPU
用户进程在运行过程中消耗的 CPU
4)附加说明
① 负载跟 cpu 颗粒数的关系
保持 1:1 的关系即可,业界也有说法负载是 CPU 颗粒数的 70%-80%。
②CPU 使用率高负载一定高吗,CPU 使用率低负载一定低吗?
通常情况下 CPU 使用率高负载就高,但也有例外情况。如某个进程在做复杂的运算,负载就只有 1,此时是 CPU 使用率高,负载低的情况。如大大量的 io 等待进程,如等待第三方连接、读第三方的 member cache,此时 CPU 使用率低但负载很高。
③ 启了一个 java 服务,会写日志,会读写磁盘,消耗的 cpu 是用户 cpu 还是系统 cpu,为什么?
消耗系统 CPU,写磁盘和读磁盘时切换到内核,由内核进程去操作系统磁盘。尽量避免大量占用系统 cpu,不然用户 cpu 干活就少了
7 上下文切换、中断
1)进程切换
进程在这个时间片内没有把这件事情做完,时间到了 cpu 会把这个进程从时间片里让出来,然后丢给下个进程,下个进程开始干活。进程进行切换时需要保存当前进程执行的状态,状态包括上下,上是值执行到哪个环节,使用哪个地址空间,下是指再次拿到时间片后该继续执行什么操作。
2)中断
进程在这个时间片内,没执行完,产生了中断。中断分为软中断和硬中断。
① 软中断:
内部因素,时间片没了,时间片内执行不完。
② 硬中断:
外部因素,强制终止,如从键盘读取一个值才能继续执行,此时必须接受外部的字符串,不能连续执行,先挂起进程,只有拿到字符串之后才能继续执行。
③ 中断一般什么原因产生?
等待磁盘 io,等待外部设备的数据,时间片到了进程没处理完让出时间片也会产生中断。
举例:假如单核 cpu,启动三个进程 abc,刚启动时 abc 都是 running 状态,但此时的 running 是个假 running,都还没拿到 cpu,加入 a 比较快,抢占到 cpu,状态变化如下
8 vmstat 查看 CPU、内存、磁盘
vmstat 可以对操作系统的内存信息、进程状态、CPU 活动、磁盘等信息进行监控,不足之处是无法对某个单独进程进行查看。
1)procs
r:表示运行和等待 CPU 时间片的进程数(相当于负载),这个值如果长期大于 CPU 颗粒数,则表示 CPU 不足,需要增加 CPU。
b:表示在等待资源的进程数,比如正在等待 io 或内存交换。
2)memory
swpd:虚拟内存的大小,单位 KB,如果 swap 值不为 0 或者比较大,只要 si、so 的值长期为 0,这种情况一般属于正常情况。
free:表示当前空闲的物理内存(单位 KB)。
Buff:缓冲大小,一般对设备的写才需要缓冲,频繁往磁盘写。
Cache:缓存大小,一般读文件需要缓冲,频繁访问的文件都会被缓存,如果 cache 值非常大说明缓存文件比较多,如果此时 io 中的 bi 比较小,说明文件系统效率比较好。
3)swap
Si:表示由磁盘调入内存,也就是内存进入内存交换区的内存大小。
So:表示由内存进入磁盘,也就是由内存交换区进入内存的内存大小。
一般情况下,si、so 的值都为 0,如果 si、so 的值长期不为 0,则说明系统内存不足,需要增加系统内存。
4)Io
bi:表示由块设备读入数据的总量,即读磁盘,单位 kb/s。
bo:表示写到块设备数据的总量,即写磁盘,单位 kb/s。
如果 bi+bo 值过大,且 wa 值较大,则表示系统磁盘 IO 瓶颈。
5)system
In:表示某一时间间隔内观测到的每秒设备中断数。
cs:表示每秒产生的上下文切换次数。
这 2 个值越大,则由内核消耗的 CPU 就越多。
6)CPU
us:表示用户进程消耗的 CPU 时间百分比,us 值越高,说明用户进程消耗 cpu 时间越多,如果长期大于 50%,则需要考虑优化程序或者算法。
sy:表示系统内核进程消耗的 CPU 时间百分比,一般来说 us+sy 应该小于 80%,如果大于 80%,说明可能出现 CPU 瓶颈。
id:表示 CPU 处在空闲状态的时间百分比。
wa:表示等待所占的 CPU 时间百分比,wa 值越高,说明 I/O 等待越严重,根据经验 wa 的参考值为 20%,如果超过 20%,说明 I/O 等待严重,引起 I/O 等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者此监控器的带宽瓶颈(主要是块操作)造成的。
综上所述,如果评估 CPU,需要重点关注 procs 项的 r 列值和 CPU 项的 us、sy、wa 列的值。
9 CPU 监控
1)怎么看 CPU 使用情况
① 看负载,负载越高,压力越大,跟 CUP 颗粒数比较,大于 cpu 颗粒数,排队
② 看 CPU 使用率,CPU 使用率可简单理解为给进程用的时间片/总的时间片。如果 CPU 使用率高,则分析系统 CPU 高还是用户 CPU 使用率高,常见的是用户 CPU 使用率高。用户 CPU 高,那一定是程序占用的,系统 cpu 高 30%概率是磁盘 io 频繁导致,NI CPU 高,说明程序设置了优先级,且优先级高的进程在频繁调用(这种情况很少),中断 CPU 高,说明在频繁设备交互或程序内部 CPU 切换。
2)top 命令查看时发现中断所占的 CPU 高怎么办
中断 CPU 高,可看一下系统 CPU 是不是也高,如果系统 cpu 也高,就用 vmstat 看一下中断次数和上下文切换次数,如果中断次数和上下文切换次数也都比较高(上下文切换次数大没有明确的定义,跟 CPU 的颗粒数有关,经验判断单核上文切换次数不超过 2000 就不大),基本就可以确定是中断导致了上下文切换高,导致系统 CPU 占用高,接下来就是分析为什么会产生中断,具体问题具体分析。
3)CPU 监控
%usr:用户进程消耗的 CPU 时间百分比。
%nice: 运行优先级高进程消耗的 CPU 时间百分比。
%system:系统进程消耗的 CPU 时间百分比。
%iowait:I/O 等待所占 CPU 时间百分比。
%steal:在内存紧张环境下,pagein 强制对不同的页面进行的 steal 操作。
%idle:CPU 空闲状态的时间百分比。
在所有的显示中,我们应主要注意%wio 和%idle,%wio 的值过高,表示硬盘存在 I/O 瓶颈, %idle 值高,表示 CPU 较空闲,如果%idle 值高但系统响应慢时,有可能是 CPU 等待分配内存, 此时应加大内存容量。%idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表 明系统中最需要解决的资源是 CPU
10 内存监控
1)top 命令查看内存
2)free 命令查看内存
3)Java 应用程序不用管内存使用率,非 java 性需要关注内存使用率
java 虚拟机,启动程序时会开辟一块内存供应用程序使用使用,可能 java 程序一运行,内存使用率就达 70%多。java 程序只用考虑:GC、内存溢出问题。
11 磁盘监控
1)iostat -x
iostat 是对系统的磁盘 I/O 操作进行监控,它的输出主要显示磁盘读写操作的统计信息,同时给出 CPU 的使用情况。同 vmstat 一样,iostat 不能对某个进程进行深入分析,仅对操作系统的整体情况进行分析
① 各字段含义
rrqm/s:每秒进行 merge 的读操作次数,即 delta(rmerge)/s 。 Ø
wrqm/s:每秒进行 merge 的写操作次数,即 delta(wmerge)/s 。 Ø
r/s:每秒完成的读 I/O 设备次数,即 delta(rio)/s 。 Ø
w/s: 每秒完成的写 I/O 设备次数,即 delta(wio)/s 。 Ø
rsec/s:每秒读扇区数,即 delta(rsect)/s。 Ø
wsec/s:每秒写扇区数,即 delta(wsect)/s Ø
rkB/s:每秒读 K 字节数,是 rsect/s 的一半,因为每扇区大小为 512 字节。 Ø
wkB/s:每秒写 K 字节数,是 wsect/s 的一半 Ø
avgrq-sz:平均每次设备 I/O 操作的数据大小 (扇区),即 delta(rsect+wsect)/delta(rio+wio) 。 Ø
avgqu-sz:平均 I/O 队列长度,即 delta(aveq)/s/1000 (因为 aveq 的单位为毫秒)。 Ø
Await:请求队列中等待时间+svctm(服务时间) 单位是毫秒,按照每次 IO 平均。 即 delta(ruse+wuse)/delta(rio+wio) 。 一般地系统 IO 响应时间应该低于 5ms,如果大于 10ms 就比较大了。 这个时间包括了队列时间和服务时间,也就是说,一 般情况下,await 大于 svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。 Ø
svctm:平均每次设备 I/O 操作的服务时间 (毫秒),即 delta(use)/delta(rio+wio) 。 Ø
%util:一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的, 即 delta(use)/s/1000 (因为 use 的单位为毫秒) 。
② 分析磁盘是否有问题
首先看磁盘队列,如果磁盘队列长度大于 1,磁盘严重有问题
其次是看是读有问题还是写有问题
读多,内存不够(内存小数据量大、没建索引)
写多,写日志,数据库 insert/update、同步操作(数据库集群数据同步、主从数据同步)
2)sar -d
sar 是非常强大性能分析命令,通过 sar 命令可以全面的获取系统的 CPU、运行队列、磁盘 I/O、交换区、内存、cpu 中断、网络等性能数据
tps:每秒从物理磁盘 I/O 的次数.多个逻辑请求会被合并为一个 I/O 磁盘请求,一次传输的大小是不确定的。
rd_sec/s:每秒读扇区的次数。
wr_sec/s:每秒写扇区的次数。
avgrq-sz:平均每次设备 I/O 操作的数据大小(扇区)。
avgqu-sz:磁盘请求队列的平均长度。
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1 秒=1000 毫秒)。
svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间。
%util:I/O 请求占 CPU 的百分比,比率越大,说明越饱和。
avgqu-sz 的值较低时,设备的利用率较高。
当%util 的值接近 1% 时,表示设备带宽已经占满。
3)看磁盘大小和使用率:df
12 常用命令总结
1)top
c:显示路径
H:显示线程
l:不显示负载
shift + p :按 cpu 使用率排序
shift + p :按内存进行排序
top -p 21308(pid)单独监控某个进程
2)vmstat
vmstat 2 :2s 监控一次
vmstat 2 3:2s 监控一次,监控 3 次
3)iostat
Iostat -x
4)如何看操作系统位数
uname -a:如果返回结果中有_64,就是 64 位,否则就是 32 位
5) sar 命令选项结合起来判断系统瓶颈问题
怀疑 CPU 存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑 I/O 存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看