瀏覽代碼

Fix Node Fibers 100% CPU issue.

Thanks to kentonv !

Related wekan/wekan-mongodb#2, related meteor/meteor#9796
Lauri Ojansivu 7 年之前
父節點
當前提交
e26a4824cf
共有 3 個文件被更改,包括 50 次插入2 次删除
  1. 24 1
      Dockerfile
  2. 7 0
      server/authentication.js
  3. 19 1
      snapcraft.yaml

+ 24 - 1
Dockerfile

@@ -14,7 +14,7 @@ ARG SRC_PATH
 # Set the environment variables (defaults where required)
 # paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
 ENV BUILD_DEPS="apt-utils gnupg gosu wget curl bzip2 build-essential python git ca-certificates gcc-7 paxctl"
-ENV NODE_VERSION ${NODE_VERSION:-v8.9.3}
+ENV NODE_VERSION ${NODE_VERSION:-v8.11.1}
 ENV METEOR_RELEASE ${METEOR_RELEASE:-1.6.0.1}
 ENV USE_EDGE ${USE_EDGE:-false}
 ENV METEOR_EDGE ${METEOR_EDGE:-1.5-beta.17}
@@ -68,6 +68,29 @@ RUN \
     tar xvzf node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
     rm node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
     mv node-${NODE_VERSION}-${ARCHITECTURE} /opt/nodejs && \
+    \
+    # Remove original node, use Fibers 100% CPU usage issue patched node
+    rm /opt/nodejs/bin/node && \
+    # Node Fibers 100% CPU usage issue:
+    # https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-381453161
+    # https://github.com/meteor/meteor/issues/9796#issuecomment-381676326
+    # https://github.com/sandstorm-io/sandstorm/blob/0f1fec013fe7208ed0fd97eb88b31b77e3c61f42/shell/server/00-startup.js#L99-L129
+    # Also see beginning of wekan/server/authentication.js
+    #   import Fiber from "fibers";
+    #   Fiber.poolSize = 1e9;
+    # Download node version 8.11.1 that has fix included, node binary copied from Sandstorm
+    # Description at https://releases.wekan.team/node.txt
+    # SHA256SUM: 18c99d5e79e2fe91e75157a31be30e5420787213684d4048eb91e602e092725d
+    echo "18c99d5e79e2fe91e75157a31be30e5420787213684d4048eb91e602e092725d  node" >> node-SHASUMS256.txt.asc && \
+    wget https://releases.wekan.team/node && \
+    # Verify Fibers patched node authenticity
+    echo "Fibers patched node authenticity:" && \
+    grep node node-SHASUMS256.txt.asc | shasum -a 256 -c - && \
+    rm -f node-SHASUMS256.txt.asc && \
+    chmod +x node && \
+    mv node /opt/nodejs/bin/ && \
+    \
+    # Create symlinks
     ln -s /opt/nodejs/bin/node /usr/bin/node && \
     ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
     \

+ 7 - 0
server/authentication.js

@@ -1,5 +1,12 @@
 Meteor.startup(() => {
 
+  // Node Fibers 100% CPU usage issue
+  // https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-381453161
+  // https://github.com/meteor/meteor/issues/9796#issuecomment-381676326
+  // https://github.com/sandstorm-io/sandstorm/blob/0f1fec013fe7208ed0fd97eb88b31b77e3c61f42/shell/server/00-startup.js#L99-L129
+  import Fiber from "fibers";
+  Fiber.poolSize = 1e9;
+
   Accounts.validateLoginAttempt(function (options) {
     const user = options.user || {};
     return !user.loginDisabled;

+ 19 - 1
snapcraft.yaml

@@ -81,7 +81,7 @@ parts:
     wekan:
         source: .
         plugin: nodejs
-        node-engine: 8.9.3
+        node-engine: 8.11.1
         node-packages:
             - npm@5.5.1
             - node-gyp
@@ -100,6 +100,24 @@ parts:
         prepare: |
             echo "Cleaning environment first"
             rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
+            # Node Fibers 100% CPU usage issue:
+            # https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-381453161
+            # https://github.com/meteor/meteor/issues/9796#issuecomment-381676326
+            # https://github.com/sandstorm-io/sandstorm/blob/0f1fec013fe7208ed0fd97eb88b31b77e3c61f42/shell/server/00-startup.js#L99-L129
+            # Also see beginning of wekan/server/authentication.js
+            #   import Fiber from "fibers";
+            #   Fiber.poolSize = 1e9;
+            # Download node version 8.11.1 that has fix included, node binary copied from Sandstorm
+            # Description at https://releases.wekan.team/node.txt
+            # SHA256SUM: 18c99d5e79e2fe91e75157a31be30e5420787213684d4048eb91e602e092725d
+            echo "18c99d5e79e2fe91e75157a31be30e5420787213684d4048eb91e602e092725d  node" >> node-SHASUMS256.txt.asc
+            wget https://releases.wekan.team/node
+            # Verify Fibers patched node authenticity
+            echo "Fibers 100% CPU issue patched node authenticity:"
+            grep node node-SHASUMS256.txt.asc | shasum -a 256 -c -
+            rm -f node-SHASUMS256.txt.asc
+            chmod +x node
+            mv node `which node`
             echo "Applying paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303"
             paxctl -mC `which node`
             echo "Installing meteor"