繁体   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