谷歌应用引擎如何控制实例nodejs的数量

时间:2016-08-25 14:47:19

标签: node.js google-app-engine app.yaml

我正在使用带有nodejs的谷歌应用引擎 我想限制app引擎使用的实例数。 我在使用gcloud cli进行部署之前尝试了app.yaml,但我认为它不起作用...
我已经设置了app.yaml文件,如下面的

runtime: nodejs
vm: true
automatic_scaling:
  min_num_instances: 1
  max_num_instances: 3
  cool_down_period_sec: 120 # default value
  cpu_utilization:
    target_utilization: 0.7

但此时仍在使用8个实例 如何减少实例数并控制它们?

运行gcloud app versions list后,

SERVICE  VERSION          TRAFFIC_SPLIT  LAST_DEPLOYED              SERVING_STATUS
default  20160811t015921  0.00           2016-08-11T02:03:24+09:00  SERVING
default  20160811t022251  0.00           2016-08-11T02:26:20+09:00  SERVING
default  20160811t023404  0.00           2016-08-11T02:36:45+09:00  STOPPED
default  20160811t031525  0.00           2016-08-11T03:17:48+09:00  STOPPED
default  20160811t053241  0.00           2016-08-11T05:35:19+09:00  STOPPED
default  20160817t191913  0.00           2016-08-17T19:21:46+09:00  STOPPED
default  20160817t220352  0.00           2016-08-17T22:06:17+09:00  STOPPED
default  20160818t171126  0.00           2016-08-18T17:14:07+09:00  STOPPED
default  20160820t000714  0.00           2016-08-20T00:10:16+09:00  STOPPED
default  20160820t033731  0.00           2016-08-20T03:39:45+09:00  STOPPED
default  20160821t023159  0.00           2016-08-21T02:34:05+09:00  STOPPED
default  20160821t025235  1.00           2016-08-21T02:55:13+09:00  SERVING

运行gcloud app instances list后,

SERVICE  VERSION          ID  VM_STATUS  DEBUG_MODE
default  20160811t015921  0   RUNNING
default  20160811t015921  1   RUNNING
default  20160811t022251  0   RUNNING
default  20160811t022251  1   RUNNING
default  20160811t022251  2   RUNNING
default  20160811t022251  3   RUNNING
default  20160811t022251  4   RUNNING
default  20160821t025235  0   RUNNING    YES

出来了。

2 个答案:

答案 0 :(得分:1)

这是一个已知的GAE问题,您可能想要加注它:https://code.google.com/p/googleappengine/issues/detail?id=12363

线程或线程链接中建议了一些解决方法。

其中一个导致答案,这似乎是消除手动停止和删除不需要的实例的必要条件的好方法:How to stop creating extra instances when using google managed vms?

答案 1 :(得分:1)

根据命令的输出,您似乎运行了多个版本的应用程序。每个版本都会根据负载()启动(n)实例,即使它们没有接收流量

看起来版本public struct STATUSSTRUCT { public UInt64 nameLen; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4128)] public byte[] name; } STATUSSTRUCT status; [DllImport("test.dll", CallingConvention = CallingConvention.StdCall)] public static extern int getStatus(ref STATUSSTRUCT status); public void refreshStatus() { status = new STATUSSTRUCT(); status.nameLen = 4128; status.name = new byte[4128]; getStatus(ref status); } 是您要继续运行的版本。试着这样做:

20160821t025235

如果你这样做,它应该停止其他版本。