系统相关
首页 > 系统相关> > [代码修订版] Python 踩坑之旅进程篇其五打不开的文件

[代码修订版] Python 踩坑之旅进程篇其五打不开的文件

作者:互联网

目录

代码示例支持
平台: Centos 6.3
Python: 2.7.14
代码示例: 菜单 - Python踩坑指南代码示例

1.1 踩坑案例

长期运行的daemon进程或者socket测试类进程, 经常遇到的坑是:

IOError: [Errno 24] Too many open files

即进程遇到 IO 错误, 无法打开更多的文件.

1.2 填坑和分析

一般从两个方面入手:

1.2.1 从程序优化入手

a. 谁打开谁关闭是个普适的原则:

# with 语法会在生命周期后自动关闭打开的文件 FD
with open('xxxx_path.file', 'w') as fhandle:
    fhandle.dosth()

b. 检查文件 FD 是否存在泄漏

系统设计阶段一般会预估系统总体可打开的 FD 情况. 当出现如下情况时可能出现了泄漏 BUG

Python 基础库 CUP 提供对进程打开 FD 的支持, 详见示例代码.

1.2.2 从资源软硬限入手

Centos 6.3 Linux系统为例, 查看 /etc/security/limits.conf 获得系统软硬限资源

* soft nofile 10240
* hard nofile 10240

其中, 用户不能突破系统的硬线 hard nofile limit.

用户也可以通过 shell 命令 ulimit -n 来限定该 shell 启动的所有进程的 nofile

ulimit -a 可以查看当前用户被设定的限制, 示例:

[test@agent1 ~]$ ulimit -a
core file size          (blocks, -c) 0
.......
open files                      (-n) 10240
.....
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

1.4.1 技术关键字

下期坑位预告


Life is short. We use Python.

标签:1.2,示例,Python,nofile,修订版,FD,进程,打开,打不开
来源: https://www.cnblogs.com/mythmgn/p/11120549.html