• 关于出现too many open files异常


     来自公司的处理方法:

    首行在Linux系统中用ulimit -a确认,已经设置了max open files为65535,按道理来说,一个应用应该不会打开这么多的文件数。

    我首先怀疑的是短连接引起的这个问题,后来经过监控,发现连接数变化正常,但是连接数减少的时候也没有影响到pipe数量的减少,所以首先排除了这个可能。

    第二是怀疑memcache的连接问题,因为以前在网上也有听说过memcache的连接有问题。后来上网一查,发现danga.memcached2.0.1存在nio管道句柄泄漏问题。和我这个问题十分类似,经过阅读了解了其中的原因,后看到2.5.1版本已经修正了这个问题。只要更换client版本即可修复。

     

     

     

     

    我给点补充:

    Q:什么是最大文件数?

    A:This number indicates the maximum number of files normal users (i.e. non-root) can have open in a single session

      这个是来自redhad的解释,意思就是普通用户在一个单一进程中所能打开的最多文件数

    Q:如何查看当前系统配置的最大文件数

    A:用ulimit-a  结果如下:其中红色部分为最大文件数

    [root@sanp_244 ~]# ulimit -a
    core file size          (blocks, -c) unlimited
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 147584
    max locked memory       (kbytes, -l) 32
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 60000
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 147584
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    [root@sanp_244 ~]# ulimit -a

    core file size          (blocks, -c) unlimited

    data seg size           (kbytes, -d) unlimited

    scheduling priority             (-e) 0

    file size               (blocks, -f) unlimited

    pending signals                 (-i) 147584

    max locked memory       (kbytes, -l) 32

    max memory size         (kbytes, -m) unlimited

    open files                      (-n) 60000

    pipe size            (512 bytes, -p) 8

    POSIX message queues     (bytes, -q) 819200

    real-time priority              (-r) 0

    stack size              (kbytes, -s) 10240

    cpu time               (seconds, -t) unlimited

    max user processes              (-u) 147584

    virtual memory          (kbytes, -v) unlimited

    file locks                      (-x) unlimited

    Q:如何修改这个数?

    A:在root账户下执行ulimit -n 65535,执行完后通过ulimit-a 发现文件最大数已经变成65535

    Q:如何查看某个进程已经使用的文件数?

    A: lsof -p 29165 |wc -l   其中29165是你要输入的进程号,输出结果为一个数字

    补充:lsof 就是“list open files” 的意思,不是每个linux系统都有装lsof这个程序,而且这个一定要在root账户下才能使用,因为要访问内核信息

     

  • 相关阅读:
    主要几种通信协议的性能比较(转载)
    mina与spring集成(翻译)
    DF标志和串传送指令
    编写不会产生除法溢出的子程序
    转: 匈牙利标记法
    转:四种方式实现从尾到头输出单向链表(链表逆序打印)
    汇编语言注释标记符
    汇编将数据以十进制格式显示在屏幕上
    转:汇编寄存器的使用
    蒙特卡罗算法 求数组主元素
  • 原文地址:https://www.cnblogs.com/sunwei2012/p/1857538.html
Copyright © 2020-2023  润新知