• 什么事文件描述符


    当某个程序打开文件时,操作系统返回相应的文件描述符,程序为了处理该文件必须引用此描述符。所谓的文件描述符是一个低级的正整数。最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应。因此,函数 scanf() 使用 stdin,而函数 printf() 使用 stdout。你可以用不同的文件描述符改写默认的设置并重定向进程的 I/O 到不同的文件。
     
     
     
     
     
    1、首先说什么是文件描述符,它有什么作用?
    文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。Unix 操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix 通常有一个系统级的限制。

    因为squid 的工作方式,文件描述符的限制可能会极大的影响性能。当squid 用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket 被关闭,squid 不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。

    在运行./configure 之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。大多数情况下,1024 个文件描述符足够了。非常忙的cache可能需要4096或更多。在配置文件描述符限制时,我推荐设置系统级限制的数量为每个进程限制的2 倍。
    2、怎么突破,具体方法?
    先查看LINUX默认的文件描述符:
    # ulimit -n
    1024
    我们用命令
    ulimit -HSn 65536
    来增大文件描述符,然后编译安装squid,
    把ulimit -HSn 65536放到/etc/rc.d/rc.local让启动时加载。
    以下为转载:

    Linux

    在Linux 上配置文件描述符有点复杂。在编译squid 之前,你必须编辑系统include 文件中的一个,然后执行一些shell 命令。请首先编辑/usr/include/bits/types.h 文件,改变__FD_SETSIZE 的值:
    #define _ _FD_SETSIZE 8192

    下一步,使用这个命令增加内核文件描述符的限制:
    # echo 8192 >; /proc/sys/fs/file-max

    最后,增加进程文件描述符的限制,在你即将编译squid 的同一个shell 里执行:
    sh# ulimit -Hn 8192

    该命令必须以root 运行,仅仅运行在bash shell。不必重启机器。

    使用这个技术,你必须在每一次系统启动后执行上述echo 和ulimit 命令,或者至少在squid 启动之前。假如你使用某个rc.d 脚本来启动squid,那是一个放置这些命令的好地方。

     

    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1560102

  • 相关阅读:
    二分图最大匹配的König定理及其证明
    HDOJ 2389 Rain on your Parade
    HDOJ 1083 Courses
    HDOJ 2063 过山车
    POJ 1469 COURSES
    UESTC 1817 Complete Building the Houses
    POJ 3464 ACM Computer Factory
    POJ 1459 Power Network
    HDOJ 1532 Drainage Ditches
    HDU 1017 A Mathematical Curiosity
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331901.html
Copyright © 2020-2023  润新知