- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
之前写过一篇 Nuxt3 的文章,Nuxt3 环境变量配置,用到了 PM2,但是里面的一些配置存在问题,最近有空又验证了一下,这里做一个勘误.
PM2 的启动配置中有一项是exec_mode,默认是fork,另一个可选值是cluster,fork 是单进程模式,cluster 是多进程模式,也就是常说的集群模式.
最早开始用 Nuxt3 的时候,还在内测阶段,当时找到的资料很多都是基于 Nuxt2 的,Nuxt3 的文档也不是很全,所以很多配置都是参考 Nuxt2 的,有点病急乱投医了,最后拼凑出一套能正常启动的配置就没有再调整了,详情可以看之前的文章,这里把有问题的字段挑出来.
{
exec_mode: "cluster",
instances: "max", // Or a number of instances
script: "npm",
args: "start",
}
这里的配置造成了什么问题呢?首先可以看出来是通过 npm 来启动程序的,通过npm run start这个命令来执行package.json中的start脚本node .output/server/index.mjs,首先这样是可以启动的,但是存在一些问题:
服务器偶尔会出现 CPU 占用过高的情况,查看 CPU 占用情况发现是 node 进程,于是定位到 PM2,查看运行情况发现多个进程只有一个启动成功,其他的进程都在反复重启,CPU 自然升高。再去查看日志发现是因为端口被占用导致只有一个进程能启动成功,这时我意识到配置可能有问题,不过当时没有时间调整,于是一直以来都是通过手动停止其他进程来解决问题.
有问题当然要解决,集群模式我接触的不多,但既然有这个配置,肯定不会因为端口占用就无法启动,Nuxt3 至今已有较大的版本变化,于是我再次翻看 Nuxt3 的文档,看下官方是怎么配置 PM2 的:
docs/getting-started/deployment 。
module.exports = {
apps: [
{
name: "NuxtAppName",
port: "3000",
exec_mode: "cluster",
instances: "max",
script: "./.output/server/index.mjs",
},
],
};
最早我是没觉得问题出在启动脚本这的,直到我又找到一个 github 上的 issue Port Already in Use in Cluster Mode,包括里面关联的问题都提到了不应使用 npm 来启动,而是直接使用脚本路径.
You can't cluster application via npm start. To make cluster work, in the script attribute of your ecosystem.config.js, directly put the path of your javascript app. 。
通过 npm 启动时并没有将这个进程直接托管给 pm2,而是通过 npm 启动了一个进程,pm2 只是监控这个进程,所以 pm2 并不能很好地管理这个进程,上面的截图中也可以看到版本号是 0.39.7,其实这个是服务器上 nvm 的版本,而不是 nuxt3 程序的版本.
最早我怀疑是集群模式的问题,但即使改成 fork,也还是会出现端口占用的报错,虽然可以通过修改instances来解决,但隐约觉得不是正确的方法,在解决启动报错问题之后,我再次尝试了使用集群模式,不过我仍然不太清楚是否应该使用这个配置,于是我做了一些测试,只是在本地环境的一些测试,结果并不准确,只能做个参考.
instances是要使用的进程数量,它的值可以是'max'、-1或其他数字,'max'表示使用最大的实例数,-1表示使用最少的基本就是 1 个,其他数字表示使用指定数量的实例数,这个实例数是根据 CPU 核心数来计算的,比如单核双线程的 CPU,实例数就是 2.
首先我在本地启动了一个 nuxt3 项目,这里模拟服务器环境只用了 2 个实例,然后使用两种不同的 pm2 启动方式执行.
使用pm2 monit监控进程,可以看到这时还没什么区别,这时用 jmeter 进行压测,创建 500 个线程访问集群模式的进程,可以看到两个进程都在运行:
然后同样的压测,但是使用 fork 模式,可以看到只有一个进程在运行:
我并不了解压测,只是简单对比一下,可以看出集群模式的 CPU 波动还是比较明显的,fork 模式 CPU 的波动不明显,但是内存占用会极速攀升,没有截到图。继续增加压测线程,内存的变化并不明显,集群模式的 CPU 占用会更加明显,也有可能是因为压测应用和被压测应用都在本地,所以这个测试结果并不准确,在错误率方面,也没有测出两者的区别。通过简单的测试并没有感受出优劣,集群的优势可能体现在性能和容错方面,在硬件上看不出太多效果,这里只是做一个记录,具体还需要更多的实践经验.
集群模式允许联网的 Node.js 应用程序(http(s)/tcp/udp 服务器)在所有可用的 cpu 上扩展,无需任何代码修改。根据可用 cpu 的数量,这将极大地提高应用程序的性能和可靠性.
最后此篇关于Nuxt3+PM2集群模式启动及勘误的文章就讲到这里了,如果你想了解更多关于Nuxt3+PM2集群模式启动及勘误的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
由于 PostgreSQL 人员选择的术语不当,这会让一些人感到困惑,但请耐心等待... 我们需要能够支持多个 PostgreSQL (PG) 集群,并将它们集群在多个服务器上,例如使用repmgr.
Hadoop会跑很多jobs,从Hbase读取数据,写数据到数据库。假设我有 100 个节点,那么有两种方法可以构建我的 Hadoop/Hbase集群: 100节点hadoop&hbase集群(1个b
在kafka中,我们能创建多种类型的集群,一般如下: 单节点——单个broker集群 单节点——多broker集群 多结点——多broker集群 kafka集群中主要有五个组件: Topic:主题主要
我想在两台机器上运行我的 MPI 程序,一台是 ubuntu 18.04,另一台是 Windows 10。是否可以使用不同的操作系统组成一个集群? (我正在使用 MPICH) 如果可能,怎么做?我在网
简介: 更新负载平衡集群中的节点的最佳实践是什么? 我们在 ha 代理负载均衡器后面使用 RabbitMQ 集群来支持我们的客户端轻松集群,as suggested in the RabbitMQ d
我正在尝试创建一个图表,我明确指定了许多节点的等级并指定了集群。以下代码生成我想要的图形类型: digraph { rankdir=LR subgraph cluster0 {
我正在尝试在 RABBITMQ 上进行集群。我添加了 2 个节点,但无法添加第 3 个节点。我已经聚集了 rabbit@node1 和 rabbit@node2。现在我正在尝试将 rabbit@nod
我在 MS Azure 的生产环境中启用了一个双集群多区域 HA。 我被要求重用同一个集群来使用微服务管理几个新项目。 这里的最佳做法是什么?我应该为每个应用程序创建一个集群吗?将不同集群中的每个项目
我正在尝试 flex 搜索,并且很难在具有3个 flex 搜索实例的单台计算机上创建集群。我对实例进行了以下更改: 在所有实例上更改了群集名称{cluster.name:es-stack} 在所有实例
我想创建一个redis集群,仅将特定的redis主机作为主服务器和从服务器。另外,我想自己指定哪个主机应该是哪个主机的副本。 目前,cluster-create command当在任何一个 Redis
我计划在具有负载平衡的集群中设置 Magento,那么是否可以让两个 Magento 安装指向同一个数据库? 如果可能的话 - 我应该如何配置这些服务器的基本 URL?服务器应该具有相同的名称吗? 最
我目前正在计划一个 Web 应用程序,我想计划它最终在集群上运行。 集群将由一个 php web 集群和一个 mysql 集群以及一个独立的存储单元组成(也许是一个集群,我真的不知道它是如何工作的:s
我已经安装了 elasticsearch 2.2.3 并在 2 个节点的集群中配置 节点 1 (elasticsearch.yml) cluster.name: my-cluster node.nam
我正在寻找现有的中间件解决方案,以解决服务集群/分布方面的问题,以实现负载平衡和可用性。我正在考虑基于消息传递系统(更具体地说,JMS)为此构建自己的基础设施。但是,如果可能的话,我宁愿使用已经存在的
在 Hadoop 集群中,数据是自动跨数据节点复制还是必须编程? 如果必须编程,那我该怎么做呢? 最佳答案 dfs.replication 的默认值为 3。这存在于您的 hdfs.site.xml 中
我已经设置了一个具有 1 个主节点和 2 个从节点的 redis 集群,哨兵在所有 3 个节点上运行。 在此设置之前,我的应用程序指向运行 Redis 实例的单个节点。 集群搭建完成后,我的应用应该指
所以,我正在设计一个具有多个 redis 实例的分布式系统来分解大量的流式写入,但发现很难清楚地了解事情是如何工作的。 从我读到的内容来看,正确配置的集群似乎会自动对“错误实例”上的请求进行分片和重定
我有一个关于redis集群架构的问题。 我正在设置一个 Redis 集群,并遵循基本建议:3 硕士3个奴隶 有什么方法可以在 Amazon LB、HAProxy、Nginx 等负载均衡器后面配置此集群
那么集群背后的想法是什么? 您有多台机器具有相同的数据库副本,您在其中传播读/写?这是正确的吗? 这个想法如何运作?当我进行选择查询时,集群会分析哪个服务器的读/写较少并将我的查询指向该服务器? 当您
目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kube
我是一名优秀的程序员,十分优秀!