一软一硬:记录我的工作电脑两次出现性能问题的分析思路和解决过程

news2024/12/25 1:41:19

作为一个程序员,每天工作中糟心的事情之一,莫过于自己用来编码的计算机,运行速度忽然变得奇慢无比。尤其像我这种年过四旬仍然在一线从事编码工作的老程序员来说,只有靠不断提高单位时间的产出效率,来弥补和年轻程序员体力和精力上的差距。所以工作电脑性能忽然急剧下降,是一件让我无法接受的事情。

作为一个在 SAP 领域工作了 15 年的开发人员(详情参考我的文章:一个 SAP 开发工程师的成长史),我已经记不清曾经帮助客户解决过多少个 SAP 产品的性能问题了。SAP CRM,SAP Fiori 应用,SAP Cloud for Customer,当然还有最近两年工作的 SAP 电商云 UI 即 Spartacus 运行在 CCV2 上的性能问题。

在疫情爆发的 2020 年之前,不少性能问题都是我前往客户现场,和客户方的技术人员一起合作来得以解决的。在疫情迟迟没有结束的当下,我分外留恋当时可以无拘无束出差的日子。

无论是 SAP 何种产品,当运行性能出现问题时,惯用的方式都是通过分析一些专门的性能监控工具记录的运行时数据,根据处理人员的经验来初步定位出可能引起性能问题的瓶颈,然后采取各种方式来验证自己的猜想。从发现性能问题的蛛丝马迹,到最后找到引起性能问题的罪魁祸首,在客户业务流程比较复杂,流程中涉及到多个 SAP 组件,客户自定义开发规模比较大的情况下,往往是一个痛苦的历程,但给人带来的成就感也随之爆棚,远远胜过按部就班编写完一个简单的函数,实现一个简单的功能。

大概是"医者不自医"的缘故,再加上我自己对 Windows 操作系统的熟悉程度,远远逊于我对 SAP 产品的了解,所以当自己的电脑运行出现性能问题时,我明显底气不足。虽然理论上来说,Windows 操作系统的性能问题,都可以通过把电脑交给 SAP 研究院 Local IT 同事那里重装系统来解决,但一想起系统安装完毕后,要一一重新安装两位数的开发工具和搭建开发环境,我就头痛得要命。

本文记录近一年来我的工作电脑两次遇到性能问题的经历,希望能帮助到曾经遇到类似问题的朋友们。

我工作中使用的电脑是 Lenovo Thinkpad P53,它被定位为一款移动工作站,其配置如下图,操作系统是 Windows10. 平时使用中体验非常好,我非常满意,美中不足的就是发热量大,散热风扇的噪音很响。

Windows10 从休眠中唤醒后性能急剧下降的问题

去年我遇到过一个问题,电脑运行性能忽然无缘无故下降到令人无法忍受的程度,比如打开一个 Excel 要半分钟,敲一个新字符进去,按 Ctrl + S 要五六秒才能保存成功,平时 Spartacus ng build 命令不到一分钟就能完成,现在要5分钟。

前面说到,Lenovo Thinkpad P53 的发热量非常大,因此我哪怕是离开座位10分钟,也习惯通过开始菜单里的 Sleep 将其设置为睡眠状态,让机身温度稍稍下降一些。后来我发现一个规律,这个性能问题只有每次从睡眠模式中唤醒后才会出现。如果我当天开机后,一次也不进入睡眠模式,那么一直到我关机为止,电脑都始终正常运行。

当出现性能问题时,我打开 Windows 任务管理器,观察到 System interrupts(系统中断) 这个系统进程的 CPU 占用率非常高。

按照微软官方文档,系统中断进程是 Windows 操作系统的组成部分之一,负责管理计算机硬件和操作系统之间的通信。任务管理器中 System interrupts 进程显示所有硬件中断的 CPU 使用率。

系统中断好比是 CPU 的警报系统,如果某个场景需要 CPU 关注,系统中断会提醒处理器,当前有个高优先级的任务需要执行,然后 CPU 暂停它正在做的事情,保存上下文,并处理这个高优先级的任务。一旦工作完成,CPU 就会恢复到发生中断之前的状态。

微软官方文档介绍,正常情况下系统中断进程的 CPU 占用率在 0.1% 到 2% 之间。有时它会上升到 7%,这也被认为是正常的。但是当其在任务管理器显示的 CPU 利用率飙升且居高不下时,往往意味着一些硬件层面的错误,或者是硬件的驱动程序出现了问题。

于是我就试着在 Google 上根据关键字 Windows System Interrupts CPU High Sleep Wakeup 这些关键字的排列组合,根据一条条搜索出来的帖子,开始了漫长而艰难的 “修改系统设置->重启” 的反复试验,最终一个帖子给出的解决方案,让我有了得救的感觉。

Windows 设备管理器里,选中网络适配器,右键菜单里选择属性:

然后在高级选项卡里,禁用 Wake on Magic Packet 和 Wake on pattern match 后,问题解决。以后每次系统从睡眠模式中恢复,再也没有出现性能问题。

任务管理器里没有任何异常时的性能问题

上面介绍的问题解决之后,电脑一直正常运行,直到上个月,性能问题再次出现。整个操作系统无论执行任何任务耗费的时间,都变成以前的三倍到四倍。并且这次更诡异的是,任务管理器里所有的进程 CPU 占用率没有任何异常,系统中断进程的占用率一直稳定在 0.1% ~ 2% 之间,说明这次不是硬件驱动引起的问题。

因为进程的 CPU 占用率没有任何异常,我也不知道该怎么继续分析这个问题了。一天深夜,我对着几乎瘫痪的电脑发呆,忽然觉得有什么事情不对劲:我的书房非常安静,平时夜晚陪伴着我工作的只有 P53 呼呼的风扇声音,但是现在有点不对劲,我即使把头贴着电脑,也听不到一丝一毫风扇转动的声音。此刻我电脑上仍然开着 Visual Studio Code 和十几个 Chrome 窗口。如果不是电脑显示屏仍然亮着,真的会让人怀疑电脑是不是真的处于开机状态。

这显然不正常。难道散热风扇坏了?我打开 Intel 官方的 CPU 运行状态监控软件,Intel Power Gadget,发现了问题所在。P53 Intel® Core™ i9-9880H CPU 的额定主频为 2.3G Hz, 但是 Power Gadget 测试出来的实际运行频率只有 0.8G Hz, 这主频简直退化成了我 2001 年还在上大学时,寝室台式机用过的另一款经典的 Intel CPU,Pentium III-800.

CPU 主频从 2300M Hz 一下骤降到 800M Hz,怪不得带不动 Windows 10 和在上面运行的这些应用软件啊。

不仅如此,在温度监控窗口,我还发现了 PROC HOT Alert. 至此我的思路已经很清晰了,我的这台 P53 的散热风扇肯定出问题了。

第二天,我在微信上同公司的 Local IT 联系。我的初步分析:

降频的原因,是因为系统检测到了一个 PROC HOT 的信号。Intel 官网文档,记录这个信号是 CPU 核心温度超过了 TCC 系统设置的阈值之后,系统让 CPU 降频使用的一种保护措施,但是温度监控软件里当前CPU 温度不到五十度,不知道为何会触发这个 PROC HOT 信号。

另外一点就是我笔记本电脑前段时间风扇的声音非常大,这几天完全静音了,让我怀疑:

  1. CPU 风扇损坏
  2. 笔记本电脑主板的温控探头相关的线路损坏,导致无法正确的检测到 CPU 温度,从而错误发出了 PROC HOT 信号,导致 CPU 降频使用,在低功耗下运行。风扇也就没有转或者说转速大幅度下降了。

既然已经做出了猜测,验证也就不难了。我们联系了联想的维修工程师,把电脑大卸八块,果然发现是风扇的问题。

散热风扇的轴承磨损已经比较严重了,润滑油也几乎耗尽了。更换了一个新的风扇之后,问题解决。

联想工程师介绍,P53 的风扇转速由系统控制,根据芯片温度和 CPU 负载会发生动态变化。我从 2007 年进入 SAP 成都研究院至今已经先后用过多款 Thinkpad 的笔记本电脑,每一款的散热风扇都非常耐用,能够坚持三年的正常使用。我这款 P53 也已经服役 2 年多了,可能是今年夏天成都几十年难遇的持续高温,导致它的散热风扇提前耗尽了寿命。

本文介绍了笔者工作过程中先后遇到的两个因为软件和硬件故障,造成的性能问题的分析思路和解决办法,希望对遇到过类似问题的朋友有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网课搜题接口

网课搜题接口 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转) 题库…

【leetcode】 盛最多水的容器

一、题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾…

移动通信:数字调制技术(BPSK, DPSK, QPSK, Π/4 QPSK,BFSK, MSK, GMSK, M-ary)学习笔记

文章目录Factors That Influence the Choice of Digital ModulationBandwidth and Power Spectral Density of Digital SignalsPulse Shaping TechniquesGeometric Representation of Modulation SignalsLinear Modulation TechniquesBPSKDifferential Phase Shift Keying (DPS…

软件定义汽车的关键—车载操作系统

文章目录 前言一、车载系统是什么?二、车载系统在智能汽车中的应用总结前言 智能网联大环境变革情况下,软件定义汽车理念已成行业共识。 传统分布式E/E架构因如下原因: 计算能力不足(车规芯片);通讯带宽不…

树和二叉树

目录 1.树的概念及结构 1.1树的概念 1.2.树的表示 1.2.1孩子兄弟表示法 2.2双亲表示法 1.3二叉树在实际中的应用 2.二叉树的概念及结构 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的实现及其的一些接口(链式) 2.4.1二叉树的…

配置 4G 模块为WAN口上网

配置 4G 模块为WAN口上网 将Linux板卡配置为交换机,提供类似路由器的上网功能。这里以4G网卡作为WAN进行上网。 1. 配置4G模块为默认网关 先配置好4G模块为默认路由网关。 这里需要先将4G模块配置为路由模式。 断开板卡的有线和无限网络连接,使用pi…

Redis配置与优化

1 关系数据库与非关系型数据库概述 1.1 关系型数据库 一个结构化的数据库,创建在关系模型(二维表格模型)基础上 一般面向于记录 SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言 用于执行对关系型数据库中…

后渗透之流量转发实验

目录 一、实验项目名称 二、实验目的 三、实验内容 四、实验环境 五、实验步骤 六、实验结果 七、实验总结 一、实验项目名称 后渗透之流量转发实验 二、实验目的 1.掌握ssh进行流量转发的方法 2.掌握proxychains代理软件的使用方法 3.掌握Burpsuite工具的全局代…

Java 基础之锁

Java 基础之线程_禽兽先生不禽兽的博客-CSDN博客 上一篇博客中记录了线程的一些概念,那多线程既然能与人方便必然也会带来一些问题,这些问题主要与线程的三大特性有关,Java 的一些关键字和锁机制,可以帮助我们解决这些问题。 一…

如何高效管理自己的电脑?文件再多也不乱!

视频教程:https://www.bilibili.com/video/BV18M41167jd/?share_sourcecopy_web&vd_source58093f138338062a30d9fe854824a90f 如何高效管理自己的电脑?文件再多也不乱!1. 盘符管理C盘只装系统软件,其他软件装到D盘绿色软件就是解压就能用&#xff…

[go学习笔记.第十八章.数据结构] 1.基本介绍,稀疏数组,队列(数组实现),链表

一.基本介绍 1.数据结构(算法)的介绍 (1).数据结构是一门研究算法的学科,自从有了编程语言也就有了数据结构,学好数据结构可以编写出更加漂亮,更加有效率的代码 (2).要学习好数据结构就要多多考虑如何将生活中遇到的问题用程序去实现解决 (3).程序&…

一 H5游戏的种类

游戏类型(各举一个例子): 休闲益智:开心消消乐 角色扮演:阴阳师 动作冒险:神庙逃亡 棋牌游戏:欢乐斗地主 体育竞技:最强NBA 射击游戏:绝地求生 音乐游戏:节奏大师 模拟经营:模拟城市 策略游戏:植物大战僵尸 塔防游戏:保卫萝卜 游戏付费方式…

R语言最优聚类数目k改进kmean聚类算法

在本文中,我们将探讨应用聚类算法(例如k均值和期望最大化)来确定集群的最佳数量时所遇到的问题之一。 最近我们被客户要求撰写关于聚类的研究报告,包括一些图形和统计输出。从数据集本身来看,确定集群数量的最佳值的问…

FX粒子(Niagara系统)、潮湿贴花——简单雨和雨后潮湿

雨: 1、新建粒子,选择Fountain 喷泉模板 2、删除不用模块 3、添加box location并设置其大小,设置Spawn Rate使粒子数变多,这个参数也是后面用来控制开关雨效果的参数。 4、设置粒子形状,设置完粒子方向不对&#xff0…

11.28~12.4日学习总结

星期一,星期二: 把项目中关于评论模块的内容全部写完了,然后处理了一下逻辑。 星期二,星期三:开始学习webSocket的相关概念。 关于webSocket,其实和java的Socket原理相差不大,也是要建立一个通道进行信息…

JavaScript数据结构【数组】

一、JavaScript中数组一些方法 方法 描述 push 数组的末尾插入元素 unshift 数组的开头插入元素 pop 从数组的末尾删除元素 shift 数组的开头删除元素 splice 在数组的任意位置添加或删除元素 concat 连接两个或更多数组,并返回结果 filter 对数组中…

String类

String类常用的方法 字符串构造 String类的构造方法很多,常见的有以下的三种: //三种常用的构造方法 public class Test {public static void main(String[] args) {//使用常量串构造String s1 "hello world!";//直接new String对象构造St…

一个 Angular 程序员两年多的远程办公经验分享

笔者从 2020 年疫情爆发之前,一直从事后端开发工作。2020 年因为工作原因,加入了 SAP 一个代号为 Spartacus 的开源项目的开发团队。这个项目是一个基于 Angular 的电商 Storefront 框架,其代码贡献者来自全世界各个地区。 实际上&#xff0…

工薪族创业方案

这是一个创业的时代,想自己创业做老板的人越来越多,其中也包括众多上班族。所碰到的问题:时间紧、资金有限、经验缺乏、患得患失,是几乎所有想自主创业的上班族都会遇到的问题。有以下几个方案可以尝试尝试! 方案一:对于不想冒任何风险而又想尝一尝创业滋味的上班族来说…

jdk11新特性——局部变量类型推断(var ”关键字”)

目录一、什么是局部变量类型推断二、局部变量类型推断(var ”关键字”)2.1、根据右边的表达式自动推断类型2.2、var并不是关键字2.3、var声明变量和String声明变量作用相同三、var 语法:局部变量类型推断(注意事项)3.1…