上一篇提到有工具可以做到丛集 (Cluster) 的功能,以使用多线程,今天就要来简单介绍一下这个强大的工具 - PM2。
听到 PM 不要害怕,这是 Process Manager 的意思,它能够很轻易地开启多线程执行 node.js 应用,不仅如此,它可以让应用程序永远在背景执行,甚至可以不停机更新,简直是神器呀!
透过 npm 进行全域安装:
npm install -g pm2
以往我们要启动 node.js 应用都是透过 node <档案名称>
指令,现在则改成使用 PM2 的指令,不过 PM2 提供的功能蛮多的,这边就提一些比较基础的功能来说明:
下方为透过 PM2 启动前面做的 TodoList 指令:
pm2 start ./dist/main.bundle.js
可以看到下方为启动成功的结果,这时候已经在背景运行了:
可以透过 Postman 打 API 试试:
如果今天不想要运行应用了怎麽办?非常简单,下方为移除指令:
pm2 delete ./dist/main.bundle.js
可以看到 PM2 的清单中没有东西了:
前面的启动方法是用档案名称做为 PM2 管理程序的名称,假如一台 Server 管理很多个应用的时候,很容易忘记哪个是哪个应用,所以 PM2 有提供命名的方法。另外还有最重要的多线程执行,透过参数 -i <数量>
即可用 Cluster 的概念运行多线程:
pm2 start ./dist/main.bundle.js -i 4 --name todolist
可以看到列表上有 4 个名为 todolist 的程序,并且 mode 为 cluster:
虽然在启动的时候 PM2 会显示当下的程序列表,但日後想要查看要怎麽做呢?指令也是相当简单:
pm2 list
要重启在 PM2 中运行的应用只需要下指令即可,不需要重新启动:
pm2 restart todolist
来看看多线程与单线程的差异有多少吧!先安装 loadtest 进行测试,它是一个用来压力测试的套件,能够在瞬间发出大量 Request。安装方式一样透过 npm 进行:
npm install loadtest -g
简单介绍一下我们会用到的 loadtest 参数:
-c
:设置同时并发最大数量-n
:设置最大 Request 数量-H
:设置 Headers,可以将 Authorization 的 token 放在这里我们使用下方指令针对 GET https://localhost:8080/api/todos 进行测试,由於此 API 需要 JWT 授权,所以请先打登入或注册的 API 取得 JWT,并将下方 <token>
替换成 JWT:
loadtest -n 500 -c 100 -H "Authorization: Bearer <token>" http://localhost:8080/api/todos
测试单线程时,若 PM2 有程序的话可以先将它们关闭再进行,并确认启动的应用为最新
下图为单线程的结果:
总花费时间约 5 秒。
下图为多线程的结果:
总花费时间约 4 秒。
可以看到单线程与多线程之间的效能是有落差的,测试 TodoList 算是比较不明显的比较,但依然能看出差异,若是用在更大更复杂的系统,那可就差很多了!
用 PM2 可以快速建置多线程的应用,省下许多自己配置 Cluster 的时间,不过有一点要特别注意,在 Cluster 下的记忆体是不共用的,这在有些场景是会发生问题,比如说:passport 使用动态策略命名。下一篇就是这系列的最後一篇了,将会总结这一个月以来的内容,谢谢大家!
前言: 这次来讲如何在你的App内汇入网页,本次没什麽废话要讲,因为今天连续写两篇偏累,我在想等等要...
tags: 2021铁人赛 React 如Day15的wireframe,为了要加上更多的功能,因此...
安装 https://git-lfs.github.com/ $ git lfs install $...
DOM节点的建立 建立新元素 建立新元素,系使用 document.createElement(),...
Youtube 频道:https://www.youtube.com/c/kaochenlong ...