导航:首页 > 操作系统 > linux上下文切换

linux上下文切换

发布时间:2022-08-30 15:25:55

① 为什么linux的并发间隔那么短

交替输出,这正是并发的特征。并发就是要在极短的时间内 将CPU的时间片轮流分配给不同的进程,使得宏观上看起来每一个进程都在同时运行。
至于进程的上下文切换,一般情况下都不需要考虑它的性能消耗。不过在进程上下文切换次数较多的情况下(比如IO密集型系统),确实会对系统性能产生一定的影响。

② linux中什么是时间片

时间片,简单来说就是CPU分配给各个程序的时间,使各个程序从表面上看是同时进行的,而不会造成CPU资源浪费。
时间片轮转调度中唯一有趣的一点是时间片的长度。从一个进程切换到另一个进程是需要一定时间的--保存和装入寄存器值及内存映像,更新各种表格和队列 等。
假如进程切换(process switch) - 有时称为上下文切换(context switch),需要5毫秒,再假设时间片设为20毫秒,则在做完20毫秒有用的工作之后,CPU将花费5毫秒来进行进程切换。CPU时间的20%被浪费 在了管理开销上。

③ linux进程切换如何保存的执行现场

点击保存即可。

_扇∠嘤Φ牡鞫人惴ɡ凑业较乱桓鲆葱械娜挝? 进行任务的状态指示的改变 真正的任务上下文切换。

④ linux cpu占用较高

Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行; CPU利用率。根据经验来看,用户空间进程占用CPU比例在 65-70%。一般不能超过这个比例,超过这个比例,系统性能就会降低,平均负载升高,这点将会在下面的测试中看到。
进程上下文切换。上下文切换和CPU利用率应该联系起来,如果CPU利用率低,那么上下文切换稍高点也能接受。上下文切换也是需要消耗CPU资源的,频繁的切换必将使得CPU利用率升高。
运行队列中等待运行的进程数。每个CPU核心中等待处理的进程数不应该超过3个线程/进程。如4核心的机器,那么队列的最大值应该不超过12个。
对于CPU过载问题通常使用以下两种方式即可快速定位(不能涵盖所有特殊情况,请作为其中的参考排查思路):
一、排查分析
方法一(针对java应用):

第一步:使用

top命令,然后按shift+p按照CPU排序

找到占用CPU过高的进程的pid

第二步:使用

top -H -p [进程id]

找到进程中消耗资源最高的线程的id

第三步:使用

echo 'obase=16;[线程id]' | bc或者printf "%x\n" [线程id]

将线程id转换为16进制(字母要小写)

bc是linux的计算器命令

第四步(此步骤可以和相对应的java开发进行一起排查):执行

jstack [进程id] |grep -A 10 [线程id的16进制]”

查看线程状态信息

二、kswapd0 进程占用 CPU 较高
操作系统都用分页机制来管理物理内存,操作系统将磁盘的一部分划出来作为虚拟内存,由于内存的速度要比磁盘快得多,所以操作系统要按照某种换页机制将不需要的页面换到磁盘中,将需要的页面调到内存中,由于内存持续不足,这个换页动作持续进行,kswapd0 是虚拟内存管理中负责换页的,当服务器内存不足的时候 kswapd0 会执行换页操作,这个换页操作是十分消耗主机 CPU 资源的。如果通过 top 发现该进程持续处于非睡眠状态,且运行时间较长,可以初步判定系统在持续的进行换页操作,可以将问题转向内存不足的原因来排查。

⑤ Linux里面vmstat命令作用是什么

11.5 vmstat:虚拟内存统计

11.5.1 命令详解

【命令星级】 ★★★★☆

【功能说明】

vmstat是Virtual Memory Statistics(虚拟内存统计)的缩写,利用vmstat命令可以对操作系统的内存信息、进程状态和CPU活动等进行监视。但是只能对系统的整体情况进行统计,无法对某个进程进行深入分析。

【语法格式】

vmstat [option] [delay [ count]]

vmstat [选项] [时间间隔[次数]]

说明:
1)在vmstat命令及后面的选项里,每个元素之间都至少有一个空格。

2)delay表示两次输出之间的间隔时间。

3)count表示按照delay指定的时间间隔统计的次数。

【选项说明】

表11-4针对该命令的参数选项进行了说明。

11.5.2 使用范例

范例11-12:显示虚拟内存使用情况。

[root@oldboy ~]# 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 71756 38600 279084 0 0 24 6 15 18 0 0 100 0 0

[root@oldboye ~]# vmstat 5 #<==表示每5秒钟更新一次输出信息,循环输出,按Ctrl+C组合键停止输出。

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 71804 38600 279084 0 0 2 1 9 9 0 0 100 0 0

0 0 0 71756 38600 279084 0 0 0 0 8 8 0 0 100 0 0

0 0 0 71756 38600 279084 0 0 0 0 9 9 0 0 100 0 0

^C

[root@oldboye ~]# vmstat 5 6 #<==表示每5秒更新一次输出信息,统计6次后停止输出。

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 71804 38600 279084 0 0 2 1 9 9 0 0 100 0 0

0 0 0 71756 38600 279084 0 0 0 0 9 8 0 0 100 0 0

0 0 0 71756 38600 279084 0 0 0 0 8 9 0 0 100 0 0

0 0 0 71756 38600 279084 0 0 0 0 9 8 0 0 100 0 0

0 0 0 71756 38600 279084 0 0 0 0 9 8 0 0 100 0 0

0 0 0 71756 38600 279084 0 0 0 0 9 8 0 0 100 0 0

[root@oldboy ~]#

以下是命令结果说明。

第1列:procs。

q r列表示运行和等待CPU时间片的进程数。

q b列表示在等待资源的进程数。

第2列:memory。

q swpd列表示使用虚拟内存大小。

q free列表示当前空闲的物理内存数量。

q buff列表示buffers 的内存数量。

q cache列表示cache的内存数量。

第3列:swap。

q si(swap in)列表示由磁盘调入内存,也就是内存进入内存交换区的数量。

q so(swap out)列表示由内存调入磁盘,也就是内存交换区进入内存的数量。

第4列:I/O项显示磁盘读写状况。

q bi列表示从块设备读入数据的总量(即读磁盘)(块/s)。

q bo列表示写入到块设备的数据总量(即写磁盘)(块/s)。

第5列:system显示采集间隔内发生的中断数。

q in列表示在某一时间间隔中观测到的每秒设备中断数。

q cs列表示每秒产生的上下文切换次数。

第6列:CPU项显示了CPU的使用状态。

q us列显示了用户进程消耗的CPU时间百分比。

q sy列显示了系统(内核)进程消耗的CPU时间百分比。

q id列显示了CPU处在空闲状态的时间百分比。

q wa列显示了IO等待所占用的CPU时间百分比。

q st列显示了虚拟机占用的CPU时间的百分比。

范例11-13:显示活跃和非活跃内存。

[root@oldboy ~]# vmstat -a 2 5

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

r b swpd free inact active si so bi bo in cs us sy id wa st

0 0 0 71804 160408 165848 0 0 2 1 9 9 0 0 100 0 0

0 0 0 71756 160408 165844 0 0 0 0 11 11 0 0 100 0 0

0 0 0 71756 160408 165844 0 0 0 0 12 9 0 0 100 0 0

0 0 0 71608 160412 165672 0 0 0 1302 218 341 12 9 80 0 0

0 0 0 71608 160412 165672 0 0 0 0 10 9 0 0 100 0 0

使用-a选项显示活跃和非活跃内存时,所显示的内容除增加了inact和active外,其他显示内容与范例11-12相同。

在Memory列增加的inact和active两列,说明如下。

q inact: 非活跃内存大小(当使用-a选项时显示)。

q active: 活跃的内存大小(当使用-a选项时显示)。

范例11-14:查看内存使用的详细信息。

[root@oldboy ~]# vmstat -s

486640 total memory

414572 used memory

165656 active memory

160420 inactive memory

72068 free memory

……

这些信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat。

范例11-15:查看磁盘的读/写。

[root@oldboy ~]# vmstat -d

disk- ------------reads------------ ------------writes----------- -----IO------

total merged sectors ms total merged sectors ms cur sec

ram0 0 0 0 0 0 0 0 0 0 0

ram1 0 0 0 0 0 0 0 0 0 0

……

sr0 0 0 0 0 0 0 0 0 0 0

sda 14667 3623 594388 6737 12864 32806 365372 44250 0 30

这些信息主要来自于/proc/diskstats。其中的merged表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作。

范例11-16:查看/dev/sda1磁盘的读写统计信息。

[root@oldboy ~]# vmstat -p /dev/sda1

sda1 reads read sectors writes requested writes

502 4162 14 68

这些信息主要来自于/proc/diskstats。各列的说明如下。

q reads:来自于这个分区的读的次数。

q read sectors:来自于这个分区的读扇区的次数。

q writes:来自于这个分区的写的次数。

q requested writes:来自于这个分区的写请求次数。

摘自:

跟老男孩学Linux运维:核心系统命令实战 第11章 版权归原作者所有

⑥ 如何控制Linux清理cache机制

Linux下的缓存机制及清理buffer/cache/swap的方法梳理

(1)缓存机制
为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。
缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。
CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。
(2)查看缓存区及内存使用情况
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 7866 7725 141 19 74 6897
-/+ buffers/cache: 752 7113
Swap: 16382 32 16350
可以看到内存总共8G,已使用7725M,剩余141M,不少的人都是这么看的,这样并不能作为实际的使用率。因为有了缓存机制,具体该怎么算呢?
空闲内存=free(141)+buffers(74)+cached(6897)
已用内存=total(7866)-空闲内存
由此算出空闲内存是7112M,已用内存754M,这才是真正的使用率,也可参考-/+ buffers/cache这行信息也是内存正确使用率。
(3)可见缓存区分为buffers和cached,他们有什么区别呢?
内核在保证系统能正常使用物理内存和数据量读写情况下来分配缓冲区大小。buffers用来缓存metadata及pages,可以理解为系统缓存,例如,vi打开一个文件。cached是用来给文件做缓存,可以理解为数据块缓存,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1G 测试写入一个文件,就会被缓存到缓冲区中,当下一次再执行这个测试命令时,写入速度会明显很快。
(4)随便说下Swap做什么用的呢?
Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。
swap清理:
swapoff -a && swapon -a
注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大
(5)怎样释放缓存区内存呢?
a)直接改变内核运行参数
#释放pagecache
echo 1 >/proc/sys/vm/drop_caches
#释放dentries和inodes
echo 2 >/proc/sys/vm/drop_caches
#释放pagecache、dentries和inodes
echo 3 >/proc/sys/vm/drop_caches
b)也可以使用sysctl重置内核运行参数
sysctl -w vm.drop_caches=3
注意:这两个方式都是临时生效,永久生效需添加sysctl.conf文件中,一般写成脚本手动清理,建议不要清理。
修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3
上面的设置比较粗暴,使cache的作用基本无法发挥。需要根据机器的状况进行适当的调节寻找最佳的折衷。

⑦ linux 查看每个cpu使用率

1.top
使用权限:所有使用者
使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
说明:即时显示process的动态
d :改变显示的更新速度,或是在交谈式指令列( interactive command)按s
q :没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行
c :切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S :累积模式,会将己完成或消失的子行程( dead child process )的CPU time累积起来
s :安全模式,将交谈式指令取消,避免潜在的危机
i :不显示任何闲置(idle)或无用(zombie)的行程
n :更新的次数,完成后将会退出top
b :批次档模式,搭配"n"参数一起使用,可以用来将top的结果输出到档案内

范例:
显示更新十次后退出;
top -n 10

使用者将不能利用交谈式指令来对行程下命令:
top -s

将更新显示二次的结果输入到名称为top.log的档案里:
top -n 2 -b < top.log
另附一个命令简介linux traceroutewindows tracert两个命令相当,跟踪网络路由

2.vmstat
正如我们之前讨论的任何系统的性能比较都是基于基线的,并且监控CPU的性能就是以上3点,运行队列、CPU使用率和上下文切换。以下是一些对于CPU很普遍的性能要求:
1.对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6;
2.如果CPU在满负荷运行,应该符合下列分布,
a) User Time:65%~70%
b) System Time:30%~35%
c) Idle:0%~5%
3. mpstat
对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。
常用的监视工具有:vmstat, top,dstat和mpstat.
# vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 104300 16800 95328 72200 0 0 5 26 7 14 4 1 95 0
0 0 104300 16800 95328 72200 0 0 0 24 1021 64 1 1 98 0
0 0 104300 16800 95328 72200 0 0 0 0 1009 59 1 1 98 0
r表示运行队列的大小,
b表示由于IO等待而block的线程数量,
in表示中断的数量,
cs表示上下文切换的数量,
us表示用户CPU时间,
sys表示系统CPU时间,
wa表示由于IO等待而是CPU处于idle状态的时间,
id表示CPU处于idle状态的总时间。
dstat可以给出每一个设备产生的中断数:
# dstat -cip 1
----total-cpu-usage---- ----interrupts--- ---procs---
usr sys idl wai hiq siq| 15 169 185 |run blk new
6 1 91 2 0 0| 12 0 13 | 0 0 0
1 0 99 0 0 0| 0 0 6 | 0 0 0
0 0 100 0 0 0| 18 0 2 | 0 0 0
0 0 100 0 0 0| 0 0 3 | 0 0 0
我们可以看到这里有3个设备号15,169和185.设备名和设备号的关系我们可以参考文件/proc/interrupts,这里185代表网卡eth1.
# cat /proc/interrupts
CPU0
0: 1277238713 IO-APIC-edge timer
6: 5 IO-APIC-edge floppy
7: 0 IO-APIC-edge parport0
8: 1 IO-APIC-edge rtc
9: 1 IO-APIC-level acpi
14: 6011913 IO-APIC-edge ide0
15: 15761438 IO-APIC-edge ide1
169: 26 IO-APIC-level Intel 82801BA-ICH2
185: 16785489 IO-APIC-level eth1
193: 0 IO-APIC-level uhci_hcd:usb1
mpstat可以显示每个CPU的运行状况,比如系统有4个CPU。我们可以看到:
# mpstat –P ALL 1
Linux 2.4.21-20.ELsmp (localhost.localdomain) 05/23/2006
05:17:31 PM CPU %user %nice %system %idle intr/s
05:17:32 PM all 0.00 0.00 3.19 96.53 13.27
05:17:32 PM 0 0.00 0.00 0.00 100.00 0.00
05:17:32 PM 1 1.12 0.00 12.73 86.15 13.27
05:17:32 PM 2 0.00 0.00 0.00 100.00 0.00
05:17:32 PM 3 0.00 0.00 0.00 100.00 0.00
总结的说,CPU性能监控包含以下方面:
检查系统的运行队列,确保每一个CPU的运行队列不大于3.
确保CPU使用分布满足70/30原则(用户70%,系统30%)。
如果系统时间过长,可能是因为频繁的调度和改变优先级。
CPU Bound进程总是会被惩罚(降低优先级)而IO Bound进程总会被奖励(提高优先级)。

4.prstat命令
要显示系统上当前运行的进程和项目的各种统计信息,请使用带有-J选项的prstat命令:

%prstat -J

要显示系统上当前运行的进程和任务的各种统计信息,请使用带有-T选项的prstat命令:

注–
-J和-T选项不能一起使用。

阅读全文

与linux上下文切换相关的资料

热点内容
江苏金税盘测试服务器地址是什么 浏览:607
螺杆式压缩冷凝机组 浏览:299
p在单片机里什么意思 浏览:25
linuxwireshark使用教程 浏览:656
手机访问阿里服务器地址 浏览:678
程序员可以干什么 浏览:70
绩效考核权重分配算法 浏览:524
android应用logo 浏览:898
光遇安卓服墓土商店什么时候开 浏览:566
月收益翻倍的源码 浏览:638
asop源码放在哪里 浏览:989
电脑服务器密码怎么找 浏览:574
jdp转换pdf 浏览:749
把pdf导入iphone 浏览:508
米哈游租赁的云服务器是哪个 浏览:524
android直接打电话 浏览:1018
ubuntu停止命令 浏览:285
cnc攻丝编程 浏览:871
换个手机号码app怎么注册 浏览:321
怎么下载小猴口算app 浏览:117