问题描述
我刚刚将我们的 AWS EC2 实例从 t2.xlarge
升级到 t2.2xlarge
,所以我们的实例现在有 8 个 vcpu。重新启动服务器后,我运行命令 pm2 start src/app.js -i max -f
,令我惊讶的是,我的应用程序现在运行在 12 个 vcpu 上,而不是在 8vcpu 上运行。至少这就是 pm2 list
显示的内容。这里到底发生了什么?
processor : 7
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) cpu E5-2686 v4 @ 2.30GHz
stepping : 1
microcode : 0xb000038
cpu MHz : 2300.118
cache size : 46080 KB
physical id : 0
siblings : 8
core id : 7
cpu cores : 8
apicid : 14
initial apicid : 14
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x 2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_ lm abm cpuid_fault invpcid_single pti fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips : 4600.13
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical,48 bits virtual
power management:
解决方法
我们在评论中讨论的内容摘要。
cat /proc/cpuinfo
的输出告诉我们,实例实际上有 8 个 CPU 内核,我们可以从这一行看到:
cpu cores : 8
这告诉我们 AWS 为您提供了您所支付的费用:-)
我对 pm2 一无所知,但是 docs 告诉我,-i max
中的 pm2 start src/app.js -i max -f
告诉 pm2 启动与 CPU 内核数一样多的工作进程。>
当您更改实例类型时,CPU 内核检测似乎以某种方式搞砸了,它选择将新的 8 个内核添加到它已经知道的 4 个内核中,现在为您提供 12 个进程。
作为一种解决方法,您可以像这样将工作进程的数量显式设置为 8:
pm2 start src/app.js -i 8 -f