本文先介绍了cpu上下文切换的基础知识,以及上下文切换的类型(进程,线程等切换)。然后介绍了如何查看cpu切换次数的工具和指标的解释。同时对日常分析种cpu过高的情况下如何分析和定位的方法做了一定的介绍,使用一个简单的案例进行分析,先用top,pidstat等工具找出占用过高的进程id,然后通过分析到底是用户态cpu过高,还是内核态cpu过高,并用perf 定位到具体的调用函数。(来自极客时间课程学习笔记)
1、多任务竞争CPU,cpu变换任务的时候进行CPU上下文切换(context switch)。CPU执行任务有4种方式:进程、线程、或者硬件通过触发信号导致中断的调用。
2、当切换任务的时候,需要记录任务当前的状态和获取下一任务的信息和地址(指针),这就是上下文的内容。因此,上下文是指某一时间点CPU寄存器(CPU register)和程序计数器(PC)的内容, 广义上还包括内存中进程的虚拟地址映射信息.
3、上下文切换的过程:
4、根据任务的执行形式,相应的下上文切换,有进程上下文切换、线程上下文切换、以及中断上下文切换三类。
5、进程和线程的区别:
进程是资源分配和执行的基本单位;线程是任务调度和运行的基本单位。线程没有资源,进程给指针提供虚拟内存、栈、变量等共享资源,而线程可以共享进程的资源。
6、进程上下文切换:是指从一个进程切换到另一个进程。
(1)进程运行态为内核运行态和进程运行态。内核空间态资源包括内核的堆栈、寄存器等;用户空间态资源包括虚拟内存、栈、变量、正文、数据等
(2)系统调用(软中断)在内核态完成的,需要进行2次CPU上下文切换(用户空间-->内核空间-->用户空间),不涉及用户态资源,也不会切换进程。
(3)进程是由内核来管理和调度的,进程的切换只能发生在内核态。所以,进程的上下文不仅包括了用户空间的资源,也包括内核空间资源。
(4)进程的上下文切换过程:
(5)、下列将会触发进程上下文切换的场景:
7、线程上下文切换:
8、中断上下文切换
快速响应硬件的事件,中断处理会打断进程的正常调度和执行。同一CPU内,硬件中断优先级高于进程。切换过程类似于系统调用的时候,不涉及到用户运行态资源。但大量的中断上下文切换同样可能引发性能问题。
重点关注信息:
系统的就绪队列过长,也就是正在运行和等待 CPU 的进程数过多,导致了大量的上下文切换,而上下文切换又导致了系统 CPU 的占用率升高。
这个结果中有两列内容是我们的重点关注对象。一个是 cswch ,表示每秒自愿上下文切换(voluntary context switches)的次数,另一个则是 nvcswch ,表示每秒非自愿上下文切换(non voluntary context switches)的次数。
linux的中断使用情况可以从 /proc/interrupts 这个只读文件中读取。/proc 实际上是 Linux 的一个虚拟文件系统,用于内核空间与用户空间之间的通信。/proc/interrupts 就是这种通信机制的一部分,提供了一个只读的中断使用情况。
重调度中断(RES),这个中断类型表示,唤醒空闲状态的 CPU 来调度新的任务运行。这是多处理器系统(SMP)中,调度器用来分散任务到不同 CPU 的机制,通常也被称为处理器间中断(Inter-Processor Interrupts,IPI)。
这个数值其实取决于系统本身的 CPU 性能。如果系统的上下文切换次数比较稳定,那么从数百到一万以内,都应该算是正常的。但当上下文切换次数超过一万次,或者切换次数出现数量级的增长时,就很可能已经出现了性能问题。这时,需要根据上下文切换的类型,再做具体分析。
比方说:
首先通过uptime查看系统负载,然后使用mpstat结合pidstat来初步判断到底是cpu计算量大还是进程争抢过大或者是io过多,接着使用vmstat分析切换次数,以及切换类型,来进一步判断到底是io过多导致问题还是进程争抢激烈导致问题。
CPU 使用率相关的重要指标:
性能分析工具给出的都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置,特别是用多个工具对比分析时,你一定要保证它们用的是相同的间隔时间。比如,对比一下 top 和 ps 这两个工具报告的 CPU 使用率,默认的结果很可能不一样,因为 top 默认使用 3 秒时间间隔,而 ps 使用的却是进程的整个生命周期。
top 和 ps 是最常用的性能分析工具:
这个输出结果中,第三行 %Cpu 就是系统的 CPU 使用率,top 默认显示的是所有 CPU 的平均值,这个时候你只需要按下数字 1 ,就可以切换到每个 CPU 的使用率了。继续往下看,空白行之后是进程的实时信息,每个进程都有一个 %CPU 列,表示进程的 CPU 使用率。它是用户态和内核态 CPU 使用率的总和,包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU 、以及在就绪队列等待运行的 CPU。在虚拟化环境中,它还包括了运行虚拟机占用的 CPU。
预先安装 stress 和 sysstat 包,如 apt install stress sysstat。
stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用到这个包的两个命令 mpstat 和 pidstat。
下面的 pidstat 命令,就间隔 1 秒展示了进程的 5 组 CPU 使用率,
包括:
perf 是 Linux 2.6.31 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。
第一种常见用法是 perf top,类似于 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数,使用界面如下所示:
输出结果中,第一行包含三个数据,分别是采样数(Samples)如2K、事件类型(event)如cpu-clock:pppH和事件总数量(Event count)如:371909314。
第二种常见用法,也就是 perf record 和 perf report。 perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 perf report 解析展示。
1.启动docker 运行进程:
2.ab工具测试服务器性能
ab(apache bench)是一个常用的 HTTP 服务性能测试工具,这里用来模拟 Ngnix 的客户端。
3.分析过程
CPU 使用率是最直观和最常用的系统性能指标,在排查性能问题时,通常会关注的第一个指标。所以更要熟悉它的含义,尤其要弄清楚:
这几种不同 CPU 的使用率。比如说:
碰到 CPU 使用率升高的问题,你可以借助 top、pidstat 等工具,确认引发 CPU 性能问题的来源;再使用 perf 等工具,排查出引起性能问题的具体函数.
说到服务器系统的选型,Windows Server用户和Linux用户又会开启碾压模式,始终都觉得自己选择的系统优于其它系统。其实站在中立角度来说,存在即有价值,不管是Windows Server还是Linux,都有自身的优劣势,最终选择哪款系统还是要看项目实际情况而定。 1、Windows Server傻瓜式 *** 作,入门门槛低,安全性低 可以说99%的人选择Windows Server作为其服务器 *** 作系统是因为它的入门门监低,因为都是可视化窗口 *** 作,可以这样说,只要会基本的电脑 *** 作的用户花几天时间就能完全掌握Windows Server的管理和维护。 但不可否认的是Windows Server的安全性是比不上Linux类系统的,这里不需要多说什么,大家可以看看所有的杀毒软件都是针对Windows平台的,像Linux和macOS上的杀毒软件基本没有。 2、Linux安全性高,但门槛过高 Linux内核系统以安全据称,搞过软件开发的朋友都知道,在Linux平台上执行某些程序时经常会遇到权限不足的情况,这是因为Linux的权限设计得很严格,所以在 *** 作上就略显繁琐了。 另外,Linux类系统主打的是终端模式,而不是桌面版系统。所以很多用户在面对Liunx黑色的命令行模式时就显得力不从心,望而生畏。 现在的程序开发语言很多,基本上每种都可以去开发服务端程序,所以最终 游戏 服务器系统的选择要看这个服务端程序是用什么语言开发的。 对于Java、C/C++、PHP、Python、Node.js等都是跨平台的,可以在Linux和Windows Server等系统上运行;但对于微软系的开发语言(如:VB、C#、.NETCore)等也就只能在Windows Server上运行了。 那肯定是linux好。linux安全,高效。如果需要,甚至任何一台安卓手机,都可以做个可靠的linux微型服务器。 微软服务器,每个礼拜都要关机维护一次。不然磁盘碎片太多,后面会越来越慢。linux服务器不需要维护这个。因为linux服务器,没有磁盘碎片问题。 微软内核没有公布,里面含着各种秘密后门,比如安全局秘钥特种权限。整个微软服务器非常不安全。最多只能用在不需要保密的 娱乐 服务器上面。 其实,微软内核对美军情报部门是秘密公开的。任何一位美国安全局特工,都可以轻易的利用,微软特殊秘钥。获取,全球任何一台微软服务器的一切资料。 linux内核是公开的,所以服务器,自然没有看不见的后门。因此,无论是金融银行,还是需要保证技术安全的互联网巨头,以及先进技术需要保密的制造巨头企业,最后公文需要保密的公权力党政军机关单位。都会优先使用linux服务器。 做 游戏 ,如果服务器被黑了。最坏的可能,意味着破产,所以呢,还是必须老实的拥抱linux。这个问题其实可以从两方面来考虑: 一、性能方面在专业人士经常使用来看区别不是很大,也不会说是存在碾压的情况。Linux中的线程切换速度比Win server快,但是安全性方面Win server比Linux要好一点,之所以这样说是Win 的易用性比较高,一般人士都会因为各种情况给Win防护墙开路。但是在小白手里经常出现的情况要是放到Linux上那就比较严重了。 二、其次就是经济上考虑的话Linux 免费 Win server 花钱(比较贵),但是Linux用起来比较复杂一点(要配合工作产出比来衡量)。 所以,选择他们其中一个都是可以的,主要是看你用哪个最方便适合,更专精于哪个。有句老话难者不会,会者不难。根源就在于人,系统都是面向全世界的存在即合理!选择看自己!理由如下: 希望对你有帮助游戏 服务器其实真的不复杂,主要是多简单指令,高并发,这恰恰是Linux的长处,然而既然性能要求不高,那么win其实完全也够用了,顺带还可以有更容易上手的交互界面和数据库支持。 所以,没有谁更好的说法,用谁都够用 小白用windows,大神用linux,相对来说linux更安全,同配置性能略优,windows *** 作方便,使用简单,运维更容易点! 用着好就行,实际上win应该更好些,毕竟有大公司更新维护。乱改的测试平台就是以个人喜好为主。 linux,稳定性好。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)