chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2312f5bf532f6aec5f284980/inspector.html?experiments=true&v8only=true &ws=127.0.0.1:9229/1a19bc9d-7175-4df3-b131-2eca35c7c844
贴到 chrome 地址栏中访问,然后我们看到的竟然是一个空白页,好多教程中都说会直接打开一个 chrome 开发面板,然而并没有(我使用的是 Chrome 62 版本)。这时候,你在任何一个网页中手动打开一个开发面板,chrome-devtools
地址后生成的,我用红色矩形专门标记了出来,点击这个图标又弹出了一个面板,Remote Devices
:Add Address
按钮,点击然后输入Node 应用部署的 ip 和 inspect 端口号(即启动node程序的 inspect
参数),甚至可以监听任意远程电脑的 Node 应用(如图 11.1.4所示),添加成功后,同样可以触发开发面板上出现图 11.1.1中的 Node 小图标。Add connection
,其实我们在这里一样可以添加远程 Node 应用的 inspect信息,这里的功能和图 11.1.4 中是一样的。我们点开他的 Source
tab 页,能够找到我们启动的 app.js 的源码:这项功能对于chrome来说还处于实验状态,所以在操作过程中如果你的浏览器崩溃,不要怀疑,这属于正常现象。
用户数
,这个概念对应到 JMeter 的话,就是线程组中的线程jmeter.sh
可以在 JMeter 的 bin 目录下找到 (Windows 下是 jmeter.bat); the_path_of_jmx
即保存后生成 jmx 文件;the_path_of_jtl
代表生成的每条测试情况详情,多次运行命令时,要保证每次用的文件名不一致。the_result_output_directory
中不会生成测试报表 html 文件。the_result_output_directory
直接生成报表文件。/cache-test
来模拟这个请求,这里使用随机字符串来达到每次请求都使用新数据的目的。回到 Chrome 开发面板,选择 Memory 标签页,然后再选择 Take heap snapshot
,点击 Take snapshot
按钮即可生成堆快照:Take snapshot
按钮:Snapshot 3
,然后在 Class filter
左边的下拉框中选择 Comparison
,它会自动和上一个快照做对比,我们发现 CacheItem
类型的对象在这当中新增了 82893 个,然后再对比 Snapshot 4
和 Snapshot 3
发现,CacheItem
类型对象完全没有被回收掉。以此我们可以认定,我们写的代码有内存泄漏了。为了解决这个问题,我单独做了一个闪存处理的包,借鉴了 JVM 或者 V8 中在 GC 中所使用的新生代、老生带的算法,图 11.3.4 假设缓存声明周期为 N,内部会预置一个定时器,每隔 N/2时间后将新生代拷贝到老生带,并且清空新生代,具体代码参考包 flash-cache 。
创建新应用
按钮,在弹出的对话框中,输入应用名称。创建成功后,会弹出对话框,提示应用的 appid 和 secret。npm install @alicloud/agenthub -g
即可完成安装。/etc/profile
中,然后 source /etc/profile
让其生效。同时在你的 Node 程序启动之前,你还需要启动 agenthub,否则数据无法上报。还记得之前我们创建应用时生成的 appid 和 secret 参数不,我们创建一个配置文件写入 ~/alinode.json
中,将 appid 和 secret 填入:NODE_LOG_DIR
的话,这个地方就需要设置 logdir
,agenthub 无法上报数据。agenthub ~/alinode.json
启动 agenthub,注意如果你在启动 agenthub 之前就已经通过 pm2 启动了应用,必须通过 pm2 kill 杀死当前进程,然后再重新启动,否则设置不会生效。实例
上,会看到之前配置的那台机器:CPU Profile
按钮,会提示 操作成功,请访问 文件列表 查看详情
,点击文件列表
链接,我们等待 CPU Profile 生成完成,然后选择 转储
按钮,它会将生成的文件从 Node 运行所在的服务器上传到 alinode 平台。转储完成之后,点击 分析
按钮,你会查看到生成的火焰图;点击 分析(devtools)
会将 CPU Profile 呈现在控制台中,跟图 图 11.2.6 中呈现的效果是相同的。