簡體   English   中英

Python 腳本靜默停止

[英]Python Script Stops Silently

我正在運行 Python 個腳本作為子進程,使用 Nodejs 生成。

在本地運行時,或者本地使用Docker/Kube.netes安裝時,按預期運行,完成了腳本中的所有功能。 在 Kube.netes Azure 中運行容器時,腳本在不到 1 小時的時間內靜默停止/失敗,沒有記錄任何異常或錯誤。

Memory & CPU 使用率保持在 30% 以下,容器作為一個整體沒有失敗。 運行時ps -fA | grep python ps -fA | grep python我可以看到腳本在生成后正在運行。 腳本在失敗/靜默停止后不再顯示。 Nodejs 中生成的進程的“退出”和“關閉”事件不會觸發。

任何有關如何排除故障的建議將不勝感激。

編輯:Nodejs 產卵

import {/* inject, */ BindingScope, injectable} from '@loopback/core';

const path = require('path');

const spawn = require('child_process').spawn;

@injectable({scope: BindingScope.TRANSIENT})
export class PythonService {
  constructor() {} 
  stopPython(valuationId) {}

  executePython(id: string) {
    const filepath = path.resolve(process.env.PY_PATH);

    const ls = spawn('python', [filepath, id]);

    ls.stdout.on('data', function (data) {
      console.log('stdout: ' + data.toString());
    });

    ls.stderr.on('data', function (data) {
      console.log('stderr: ' + data.toString());
    });

    ls.error.on('error', function (data) {
      console.log('error: ' + data.toString());
    });

    ls.on('exit', function (code) {
      console.log('child process exited with code ' + code.toString());
    });

    ls.on('close', code => {
      console.log(`child process exited with code ${code}`);
    });
  }
}

編輯:Dockerfile

# Pull base image
FROM python:3.7-slim

# Set installation environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV NODE_VERSION=12.20.0

# Install NVM for later use to install Node and NPM
RUN apt-get update && apt install -y curl
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
ENV NVM_DIR=/root/.nvm
RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"

# Create app directory (with user `node`)
RUN mkdir -p /home/node/app

# Set work directory
WORKDIR /home/node/app

# Install python dependencies
COPY  requirements.txt /home/node/app/
RUN pip install -r requirements.txt
RUN pip install swifter

# Install node app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY  package*.json ./
RUN npm install

# Bundle app source code
COPY . .

# Build node app
RUN  npm run build

# Expose ports
EXPOSE ${DB_PORT}
EXPOSE ${API_PORT}
EXPOSE ${SOCKET_PORT}

CMD [ "node", "." ]

Python v 3.7.11 節點 v 12.20

由於 memory 的高使用率,Unix 正在終止 Python 進程,我能夠通過在 pod 中使用 ssh 在系統日志中找到 OOM 錯誤,然后使用dmesg作為終止日志並使用ps aux --sort -pmem查看 memory 的使用情況在豆莢里。

OOM 的原因是分配給 Nodejs 的默認 memory 大大高於正常的 2GB 限制,這減少了可用的 memory 用於 Python。減少 Nodejs memory 分配或刪除獨占 Nodejs memory 分配可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM