,python,python-3.x,multiprocessing,ghostscript,postscript"/>

首页 > 解决方案 > 多处理错误 - 死于

问题描述

我正在尝试使用具有多处理功能的 ghosctscript 进行 postscript 转换,以提高性能,因为我的 pdf 文件非常大,大约 650 mb。

我写了如下脚本。

def convert_ps(out_ps,input_pdf):
    cmd = 'gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile={} -f {}'.format(out_ps,input_pdf)
    check_output(cmd,shell=True)

out_ps_list = ["out1.ps","out2.ps","out3.ps","out4.ps"]
inp_pdf_list = ["input1.pdf","input2.pdf","input3.pdf","input4.pdf"]

print("Starting time:{}".format(datetime.now()))
with Pool(processes=4) as pool:
    return_res = pool.starmap(convert_ps, zip(out_ps_list,inp_pdf_list))
pool.join()
print("End time:{}".format(datetime.now()))

当我为单个文件运行 ghostscript 命令时,将 pdf 转换为 ps 需要 40 分钟,因为它是 650mb 大小的文件。我有 4 核 linux 机器,操作系统:RHEL,所以我尝试通过使用 python 多处理来提高性能。当我在脚本之上运行时,我面临以下问题。

  1. 正如预期的那样,CPU 利用率为 100%。内存使用率接近 70-80%。

  2. 1.5-2 小时后,服务器本身关闭,没有关闭,但没有响应,尝试打开另一个会话时出现连接超时错误。在同一台服务器上运行的所有其他应用程序都出现故障,例如 Web 应用程序在同一台服务器上运行时出现 500 错误。

  3. 现在我在 AWS 控制台中检查了这个实例,它的显示服务器已启动并正在运行。CPU 利用率也低于 10%。但我仍然无法通过 SSH/putty 访问服务器。我不得不通过 AWS 控制台强制重启服务器,然后我才能访问服务器。

  4. 当我检查ghostscript posctscript转换过程时,它在没有完成所有4个工作人员的情况下停止了。有时,从 4 个文件中生成了 2 个文件,有时没有。

  5. 后来,我在 gs 命令中添加了 -dDEBUG 选项(删除了 -q)并再次尝试,在 2 小时后低于跟踪。

    ps -f Loop_Five_Thousand4.pdf' 死于 <Signals.SIGKILL: 9>。"""

    上述异常是以下异常的直接原因:

    回溯(最近一次调用):文件“pdf2ps_gs_poc.py”,第 14 行,在 return_res = pool.starmap(convert_ps, zip(out_ps_list,inp_pdf_list)) 文件“/usr/lib64/python3.8/multiprocessing/pool.py ",第 372 行,在星图中返回 self._map_async(func, iterable, starmapstar, chunksize).get() 文件 "/usr/lib64/python3.8/multiprocessing/pool.py",第 768 行,在 get raise self 中。 _value subprocess.CalledProcessError:命令 'gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=out4.ps -f Loop_Five_Thousand4.pdf' 死于 <Signals.SIGKILL: 9>。

我曾尝试使用 pool.apply_async,但没有运气。

为什么它被sginal kill 9杀死?有什么方法可以处理多处理?有人请帮助避免singal kill 9错误。

编辑:观察到,只要 RAM 内存利用率达到 97-98%,服务器就会在终止长时间运行的进程后停机。在 /var/log/message 中找不到任何与 OOM 问题相关的日志。减少运行进程数以解决问题。

标签: pythonpython-3.xmultiprocessingghostscriptpostscript

解决方案


推荐阅读