接网站开发项目电子商务网站建设考试题

pingmian/2026/1/22 14:01:31/文章来源:
接网站开发项目,电子商务网站建设考试题,哪有做网站公司,软件开发培训技术学校楔子 前面的预备章节中我们大致了解了如何在服务器上的 Node.js 应用出现问题时#xff0c;从常规的错误日志、系统/进程指标以及兜底的核心转储这些角度来排查问题。这样就引出了下一个问题#xff1a;我们知道进程的 CPU/Memory 高#xff0c;或者拿到了进程 Crash 后的核…楔子 前面的预备章节中我们大致了解了如何在服务器上的 Node.js 应用出现问题时从常规的错误日志、系统/进程指标以及兜底的核心转储这些角度来排查问题。这样就引出了下一个问题我们知道进程的 CPU/Memory 高或者拿到了进程 Crash 后的核心转储要如何去进行分析定位到具体的 JavaScript 代码段。 其实 Chrome 自带的 Devtools对于 JavaScript 代码的上述 CPU/Memory 问题有着很好的原生解析展示本节会给大家做一些实用功能和指标的介绍基于 Chrome v72不同的版本间使用方式存在差异。 本书首发在 Github仓库地址https://github.com/aliyun-node/Node.js-Troubleshooting-Guide云栖社区会同步更新。 CPU 飙高问题 I. 导出 JS 代码运行状态 当我们通过第一节中提到的系统/进程指标排查发现当前的 Node.js 应用的 CPU 特别高时首先我们需要去通过一些方式将当前 Node.js 应用一段时间内的 JavaScript 代码运行状况 Dump 出来这样子才能分析知道 CPU 高的原因。幸运的是V8 引擎内部实现了一个 CPU Profiler 能够帮助我们完成一段时间内 JS 代码运行状态的导出目前也有不少成熟的模块或者工具来帮我们完成这样的操作。 v8-profiler 是一个老牌的 Node.js 应用性能分析工具它可以很方便地帮助开发者导出 JS 代码地运行状态我们可以在项目目录执行如下命令安装此模块 npm install v8-profiler --save 接着可以在代码中按照如下方式获取到 5s 内地 JS 代码运行状态 use strict;const v8Profiler require(v8-profiler); const title test; v8Profiler.startProfiling(title, true); setTimeout(() {const profiler v8Profiler.stopProfiling(title);profiler.delete();console.log(profiler); }, 5000); 那么我们可以看到v8-profiler 模块帮我导出的代码运行状态实际上是一个很大的 JSON 对象我们可以将这个 JSON 对象序列化为字符串后存储到文件test.cpuprofile 。注意这里的文件名后缀必须为 .cpuprofile 否则 Chrome devtools 是不识别的。 注意v8-profiler 目前也处于年久失修的状态了在 Node.js 8 和 Node.js 10 上已经无法正确编译安装了如果你在 8 或者 10 的项目中想进行使用可以试试看 v8-profiler-next。 II. 分析 CPU Profile 文件 借助于 v8-profiler 拿到我们的 Node.js 应用一段时间内的 JS 代码运行状态后我们可以将其导入 Chrome devtools 中进行分析展示。 在 Chrome 72 中分析我们 Dump 出来的 CPU Profile 的方法已经和之前有所不同了默认工具栏中也不会展示 CPU Profile 的分析页面我们需要通过点击工具栏右侧的 更多 按钮然后选择 More tools - JavaScript Profiler 来进入到 CPU 的分析页面如下图所示 选中 JavaScript Profiler 后在出现的页面上点击 Load 按钮然后将刚才保存得到的 test.cpuprofile 文件加载进来就可以看到 Chrome devtools 的解析结果了 这里默认的视图是 Heavy 视图在这个视图下Devtools 会按照对你的应用的影响程度从高到低将这些函数列举出来点击展开能够看到这些列举出来的函数的全路径方便你去代码中对应的位置进行排查。这里解释两个比较重要的指标以便让大家能更有针对性地进行排查 Self Time: 此函数本身代码段执行地时间不包含任何调用Total Time: 此函数包含了其调用地其它函数总共的执行时间 像在上述地截图例子中ejs 模块在线上都应该开启了缓存所以 ejs 模块的 compile 方法不应该出现在列表中这显然是一个非常可疑的性能损耗点需要我们去展开找到原因。 除了 Heavy 视图Devtools 实际上还给我们提供了火焰图来进行更多维度的展示点击左上角可以切换 火焰图按照我们的 CPU 采样时间轴进行展示那么在这里我们更容易看到我们的 Node.js 应用在采样期间 JS 代码的执行行为新增的两个指标这边也给大家解释一下其含义 Aggregated self time: 在 CPU 采样期间聚合后的此函数本身代码段的执行总时间不包含其他调用Aggregated total time: 在 CPU 采样期间聚合后的此函数包含了其调用地其它函数总共的执行总时间 综上借助于 Chrome devtools 和能够导出当前 Node.js 应用 Javascript 代码运行状态的模块我们已经可以比较完备地对应用服务异常时排查定位到相应的 Node.js 进程 CPU 很高的情况进行排查和定位分析了。在生产实践中这部分的 JS 代码的性能的分析往往也会用到新项目上线前的性能压测中有兴趣的同学可以更深入地研究下。 内存泄漏问题 I. 判断是否内存泄漏 在笔者的经历中内存泄漏问题是 Node.js 在线上运行时出现的问题种类中的重灾区。尤其是三方库自身的 Bug 或者开发者使用不当引起的内存泄漏会让很多的 Node.js 开发者感到束手无策。本节首先向读者介绍下什么情况下我们的应用算是有很大的可能在发生内存泄漏呢 实际上判断我们的线上 Node.js 应用是否有内存泄漏也非常简单借助于大家各自公司的一些系统和进程监控工具如果我们发现 Node.js 应用的总内存占用曲线 处于长时间的只增不降 并且堆内存按照趋势突破了 堆限制的 70%  了那么基本上应用 很大可能 产生了泄漏。 当然事无绝对如果确实应用的访问量QPS也在一直增长中那么内存曲线只增不减也属于正常情况如果确实因为 QPS 的不断增长导致堆内存超过堆限制的 70% 甚至 90%此时我们需要考虑的扩容服务器来缓解内存问题。 II. 导出 JS 堆内存快照 如果确认了 Node.js 应用出现了内存泄漏的问题那么和上面 CPU 的问题一样我们需要通过一些办法导出 JS 内存快照堆快照来进行分析。V8 引擎同样在内部提供了接口可以直接将分配在 V8 堆上的 JS 对象导出来供开发者进行分析这里我们采用 heapdump 这个模块首先依旧是执行如下命令进行安装 npm install heapdump --save 接着可以在代码中按照如下方法使用此模块 use sytrict;const heapdump require(heapdump); heapdump.writeSnapshot(./test .heapsnapshot); 这样我们就在当前目录下得到了一个堆快照文件test.heapsnapshot 用文本编辑工具打开这个文件可以看到其依旧是一个很大的 JSON 结构同样这里的堆快照文件后缀必须为 .heapsnapshot 否则 Chrome devtools 是不识别的。 III. 分析堆快照 在 Chrome devtools 的工具栏中选择 Memory 即可进入到分析页面如下图所示 然后点击页面上的 Load 按钮选择我们刚才生成 test.heapsnapshot 文件就可以看到分析结果如下图所示 默认的视图其实是一个 Summary 视图这里的 Constructor 和我们编写 JS 代码时的构造函数并无不同都是指代此构造函数创建的对象新版本的 Chrome devtools 中还在构造函数后面增加 * number 的信息它代表这个构造函数创建的实例的个数。 实际上在堆快照的分析视图中有两个非常重要的概念需要大家去理解否则很可能拿到堆快照看着分析结果也无所适从它们是 Shallow Size 和 Retained Size 要更好地去理解这两个概念我们需要先了解 支配树。首先我们看如下简化后的堆快照描述的内存关系图 这里的 1 为根节点即 GC 根那么对于对象 5 来说如果我们想要让对象 5 回收即从 GC 根不可达仅仅去掉对象 4 或者对象 3 对于对象 5 的引用是不够的因为显然从根节点 1 可以分别从对象 3 或者对象 4 遍历到对象 5。因此我们只有去掉对象 2 才能将对象 5 回收所以在上面这个图中对象 5 的直接支配者是对象 2。照着这个思路我们可以通过一定的算法将上述简化后的堆内存关系图转化为支配树 对象 1 到对象 8 间的支配关系描述如下 对象 1 支配对象 2对象 2 支配对象 3 、4 和 5对象 4 支配对象 6对象 5 支配对象 7对象 6 支配对象 8 好了到这里我们可以开始解释什么是 Shallow Size 和 Retained Size 了实际上对象的 Shallow Size 就是对象自身被创建时在 V8 堆上分配的大小结合上面的例子即对象 1 到 8 自身的大小。对象的 Retained Size 则是把此对象从堆上拿掉则 Full GC 后 V8 堆能够释放出的空间大小。同样结合上面的例子支配树的叶子节点对象 3、对象 7 和对象 8 因为没有任何直接支配对象因此其 Retained Size 等于其 Shallow Size。 将剩下的非叶子节点可以一一展开为了篇幅描述方便SZ_5表示对象 5 的 Shallow SizeRZ_5 表示对象 5 的 Retained Size那么可以得到如下结果 对象 3 的 Retained SizeRZ_3 SZ_3对象 7 的 Retained SizeRZ_7 SZ_7对象 8 的 Retained SizeRZ_8 SZ_8对象 6 的 Retained SizeRZ_6 SZ_6 RZ_8 SZ_6 SZ_8对象 5 的 Retained SizeRZ_5 SZ_5 RZ_7 SZ_5 SZ_7对象 4 的 Retained SizeRZ_4 SZ_4 RZ_6 SZ_4 SZ_6 SZ_8对象 2 的 Retained SizeRZ_2 SZ_2 RZ_3 RZ_4 RZ_5 SZ_2 SZ_3 SZ_4 SZ_5 SZ_6 SZ_7 SZ_8GC 根 1 的 Retained SizeRZ_1 SZ_1 RZ_2  SZ_1  SZ_2 RZ_3 RZ_4 RZ_5 SZ_2 SZ_3 SZ_4 SZ_5 SZ_6 SZ_7 SZ_8 这里可以发现GC 根的 Retained Size 等于堆上所有从此根出发可达对象的 Shallow Size 之和这和我们的理解预期是相符合的毕竟将 GC 根从堆上拿掉的话原本就应当将从此根出发的所有对象都清理掉。 理解了这一点回到我们最开始看到的默认总览视图中正常来说可能的泄漏对象往往其 Retained Size 特别大我们可以在窗口中依据 Retained Size 进行排序来对那些占据了堆空间绝大部分的对象进行排查 假如确认了可疑对象Chrome devtools 中也会给你自动展开方便你去定位到代码段下面以 NativeModule 这个构造器生成的对象 vm 为例 这里上半部分是顺序的引用关系比如 NativeModule 实例 45655 的 exports 属性指向了对象 45589filename 属性则指向一个字符串 vm.js下半部分则是反向的引用关系NativeModule 实例 13021 的 _cache 属性指向了 Object 实例 41103而 Object 实例 41103 的 vm 属性指向了 NativeModule 实例 45655。 如果对这部分展示图表比较晕的可以仔细看下上面的例子因为找到可疑的泄漏对象结合上图能看到此对象下的属性和值及其父引用关系链绝大部分情况下我们就可以定位到生成可疑对象的 JS 代码段了。 实际上除了默认的 Summary 视图Chrome devtools 还提供了 Containment 和 Statistics 视图这里再看下 Containment 视图选择堆快照解析页面的左上角可以进行切换如下图所示 这个视图实际上是堆快照解析出来的内存关系图的直接展示因此相比 Summary 视图从这个视图中直接查找可疑的泄漏对象相对比较困难。 结尾 Chrome devtools 实际上是非常强大的一个工具本节也只是仅仅介绍了对 CPU Profile 和堆快照解析能力的介绍和常用视图的使用指南如果你仔细阅读了本节内容面对服务器上定位到的 Node.js 应用 CPU 飙高或者内存泄漏这样的问题想必就可以做到心中有数不慌乱了。 原文链接 本文为云栖社区原创内容未经允许不得转载。

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

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

相关文章

大会注册网站建设长治企业网站建设

1、获取用户信息 依次询问并获取用户的姓名、年龄、性别,收集数据之后在控制台依次打印出来。 提示: 通过prompt来弹出提示框,收集用户信息 通过变量保存数据 2、增加年龄 询问用户年龄,用户输入年龄后,把用户输入的…

制作企业网站新闻列表页面网页设计实训报告网店设计实训报告

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 支持多语句事务…

阿里云网站域名备案医院构建网络平台你怎么准备

转载自 Redis RDB文件格式全解析 点评 这篇文章作为对RDB理解的教程文章,对RDB文件的原理理解有助于进行Redis高阶应用的设计与开发。 文章转自:http://blog.nosqlfan.com/html/3734.html 作者:nosqlfan RDB文件是Redis持久化的一种方式…

泗县建设银行网站深圳建网站好的公司

目录 什么是 TCP 半连接队列和全连接队列? TCP 全连接队列溢出 如何知道应用程序的 TCP 全连接队列大小? 如何模拟 TCP 全连接队列溢出的场景? 全连接队列溢出会发生什么 ? 如何增大全连接队列呢 ? TCP 半连接队列溢出 如何查看 TC…

服务平台型网站wordpress文章只显示标题

背景 为了方便查看日志,项目中需要把日志保存到对应的日志文件中,所以需要当前的配置,以使得日志能够保存到对应的日志文件中。 代码 import ("github.com/orandin/lumberjackrus""github.com/sirupsen/logrus" )func …

织梦网站打开速度慢做网站不备案

目录 数据类型 Redis事务执行步骤 步骤: redis内存淘汰策略 设置内存淘汰策略 1.设置配置文件 2.通过命令设置 数据类型 官网解释 Understand Redis data types | Redis 首先,Redis 的所有键都是字符串,常用的数据类型有 5 种:Strin…

手机网站设计软件前端框架模板

目录 背景 驱动卸载 驱动安装 CUDA驱动安装 安装nvidia-smi 背景 这里包含显卡驱动和CUDA驱动,在如下场景下,我们需要卸载显卡驱动并重新安装。 在某些情况下需要对显卡驱动进行升级某些情况下(如重启,或者调整系统配置等&a…

专门做验收报告的网站编程培训机构需要哪些证件

首先到网上先下载PHPExcel下载后解压得到这两个文件下载后引用该文件最后编写相关代码:首先是图片插入导出$objDrawing new PHPExcel_Worksheet_Drawing();$objDrawing->setName(‘Photo‘);$objDrawing->setDescription(‘Photo‘);$objDrawing->setPath…

专业的门户网站建设方案设计灵感的网站

目前,世界各国都致力于转向更环保、更永续的传统交通替代方案。 电动车满足所有要求,因为它们具有零废气排放、改善空气品质、减少温室气体排放并创造更清洁、更健康的环境。此外,电动车的运作成本比传统内燃机驱动的汽车低,因为…

租号网站开发栖霞建设采购网站

文章目录一、Rem 布局适配1. 安装 amfe-flexible2. px转化rem3. 全局配置4. 重置样式表5. 引入重置样式表二、组件安装和配置与封装2.1. 安装less 预编译语言2.2. 安装vant-ui2.3. 端口自定义配置三、axios 工具封装3.1. 下载安装axios3.2. axios导入3.3. 创建axios 实例拦截器…

想采集某类型网站怎么做在硬盘里做网站

新换了一个项目组被人吐槽配置文件都能写错,所以打算从头开始一步步搭建一个项目,包含ssm基础框架、mongodb工具类、redis工具类、jsf配置、log配置等今天先来搭建一个web工程。工程搭建好运行时发现404我们都知道,一般404都是由于请求资源的…

深圳网站制作公司招聘镇海企业建站

缘由是:要转换的list里面的元素包含多维的tensor。c

做网站有哪些行业博客做单页网站

———————KX声卡驱动——————— 🎄声卡外观 🎄声卡介绍 🎈创新5.1 7.1声卡是网络直播,娱乐,唱歌,交友等一种音效内置声卡 🎄型号 🎈创新5.1内置声卡sb0060 0090 sn0105…

广州个性化网站开发网页设计论文提纲

虽说 HBuilder X 开发体验还算不错,但是有时候金窝银窝不如自己的狗窝,当我们习惯了 VSCode 之后,有时候不太愿意换开发工具。 那么怎么使用 VSCode 来开发 uniapp 呢? 其实是有办法的。 使用 HBuilder X 运行项目使用 VSCode 打…

用html做网站源代码做调查的网站

文末获取源码,项目编号: S 068 。 \color{red}{文末获取源码,项目编号:S068。} 文末获取源码,项目编号:S068。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课…

西安市免费做网站网站制作苏州企业

目录 一、介绍excel 二、应用场景:----可以完成什么操作 生活中遇见的场景 三、下载 四、excel模块 3.1、xlrd 语法: 案例: 算2020年与2021收入差距是多少 3.2、openpyxl 语法 案例1:计算一年的工资--12个月 案例2&…

音乐网站的音乐怎么做建设通网站原理

一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具。在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接,大致将其划分为两类,基于…

大型营销型网站制作东莞设计网站企业

用正则表达式来处理掉内容中的特定字符,下面的代码为,去掉P标签中的属性width 设置。将P标签处理后在拼接成字符串/*** 给 P 标签去掉width 样式设置* param content* return*/public static String formatCodeP(String content){String regex "]*…

网站开发与设计总结绵阳做网站的有哪些

全球“碳达峰、碳中和”已成主流趋势,为了助力全球运营商绿色网络“双碳”行动计划的达成,在华为首届无线媒体沙龙上,华为无线网络SRAN产品线总裁马洪波发表了“绿色5G,E2四化八大方向,共赢双碳未来”主题演讲&#xf…

微山网站建设大连网站开发公司力推选仟亿科技

Python开发中字典和 json的概念区别: json.dumps( dict )    字典变为字符 json.loads( jsoninput )    字符变为字典 一、字典 字典是一种数据结构,而json是一种数据格式,格式就会有一些形式上的限制,比如json的格式要求必须且只能使…