zoukankan      html  css  js  c++  java
  • Linux最大进程数、最大线程数、最大文件描述符数

    [root@robot ~]# cat /proc/sys/kernel/pid_max  //  最大进程数
    32768
    [root@robot ~]# cat /proc/sys/kernel/threads-max  // 最大线程数
    15856
    [root@robot ~]# cat /proc/sys/fs/file-max  // 最大文件描述符数
    101386
    [root@robot ~]#

         Linux内核提供了一种通过/proc文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

       用户可以通过/proc文件系统与内核进行交互。从上面的例子再次可以看出/proc与内核的关系是多么的“亲密”。我们可以

    从/proc知道更多的信息。

    ulimit命令,也可查看系统一些极限设置值,也可以设置它们。比如可以设置core.xxx文件的大小。

    [root@robot ~]# 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) 7928
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    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) 1024
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    [root@robot ~]#
                  -a     All current limits are reported
                  -b     The maximum socket buffer size
                  -c     The maximum size of core files created
                  -d     The maximum size of a process's data segment
                  -e     The maximum scheduling priority ("nice")
                  -f     The maximum size of files written by the shell and its chil-
                         dren
                  -i     The maximum number of pending signals
                  -l     The maximum size that may be locked into memory
                  -m     The maximum resident set size (many  systems  do  not  honor
                         this limit)
                  -n     The maximum number of open file descriptors (most systems do
                         not allow this value to be set)
                  -p     The pipe size in 512-byte blocks (this may not be set)
                  -q     The maximum number of bytes in POSIX message queues
                  -r     The maximum real-time scheduling priority
                  -s     The maximum stack size
                  -t     The maximum amount of cpu time in seconds
                  -u     The maximum number of processes available to a single user
                  -v     The maximum amount of virtual memory available to the shell
                  -x     The maximum number of file locks
                  -T     The maximum number of threads

    参考了chinaunix一位网友的理解:

    /proc/sys/fs/file-max 这个值是整个操作系统能打开的最大文件数
    [root@mail t2]# ulimit -a
    core file size          (blocks, -c) 10240
    data seg size           (kbytes, -d) unlimited
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 1024
    max locked memory       (kbytes, -l) 32
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    这个值是一个用户的一个进程能打开的最大文件数

    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 8063
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    有些值也可以通过sysconf函数进行设置和取得:

    (转载)http://www.cnblogs.com/leaven/archive/2011/01/14/1935181.html

    复制代码
    代码
    #include <stdio.h>
    #include 
    <unistd.h>

    #define ONE_MB (1024 * 1024)

    int main (void)
    {
        
    long num_procs;
        
    long page_size;
        
    long num_pages;
        
    long free_pages;
        
    long long  mem;
        
    long long  free_mem;

        num_procs 
    = sysconf (_SC_NPROCESSORS_CONF);
        printf (
    "CPU 个数为: %ld 个\n", num_procs);

        page_size 
    = sysconf (_SC_PAGESIZE);
        printf (
    "系统页面的大小为: %ld K\n", page_size / 1024 );

        num_pages 
    = sysconf (_SC_PHYS_PAGES);
        printf (
    "系统中物理页数个数: %ld 个\n", num_pages);

        free_pages 
    = sysconf (_SC_AVPHYS_PAGES);
        printf (
    "系统中可用的页面个数为: %ld 个\n", free_pages);

        mem 
    = (long long) ((long long)num_pages * (long long)page_size);
        mem 
    /= ONE_MB;

        free_mem 
    = (long long)free_pages * (long long)page_size;
        free_mem 
    /= ONE_MB;

        printf (
    "总共有 %lld MB 的物理内存, 空闲的物理内存有: %lld MB\n", mem, free_mem);
        
    return (0);
    }
    复制代码
    http://www.groad.net/bbs/read.php?tid-1487.html
    http://www.groad.net/bbs/read.php?tid-1485.html
    使用 sysconf() 函数确定可配置的系统变量的值。

    原型是
    引用
    #include <unistd.h>
    long sysconf (int name);


    sysconf() 返回选项 (变量) 的当前值,这个值可配置的但也是受系统限制的。在成功完成的情况下,sysconf() 返回变量的当前值。该值受到的限制将少于编译时 <limits.h>, <unistd.h> 或 <time.h> 中可用的对应值。大多数这些变量的值在调用进程的生存时间内不变。

    如果出错,那么函数返回 -1 ,并适当地设置 errno 。当没有错误发生时, -1 也是一个合法的返回值。因此,程序要检查错误,应该在调用 sysconf() 之前将 errno 设置为 0 ,然后,如果返回 -1,则检验到错误。

    参数 name 指定我们感兴趣的运行时限制的名字,它必须是以值中之一(除非另有说明,否则返回值都是整数):

    引用
    _SC_2_C_BIND  :  一个布尔值,指出是否支持 POSIX C 语言绑定。返回值是 _POSIX2_C_BIND 。

    _SC_2_C_DEV  :  一个布尔值,指出是否支持 POSIX C 语言开发使用工具选项。返回值是 _POSIX2_C_DEV 。

    _SC_2_C_VERSION :  它指出支持哪一个 ISO POSIX.2 标准 (命令) 的版本。返回值是 _POSIX2_C_VERSION 。

    _SC_2_CHAR_TERM :  一个布尔值,指出是否至少支持一个终端。返回值是 _POSIX2_CHAR_TERM 。

    _SC_2_FORT_DEV  :  一个布尔值,指出是否支持 FORTRAN 开发使用工具选项。返回值是 POSIX2_FORT_DEV 。


    ... .... 待补充 ... ...

    使用 sysconf() 函数时,必须注意

    1、CLK_TCK 的值是可变的,因此,不应该假设它是一个编译时间常量。

    2、调用 setrlimit 会使 OPEN_MAX 的值发生改变。

    3、 通过将 sysconf (_SC_PHYS_PAGES) 和 sysconf (_SC_PAGESIZE) 相乘,来确定物理内存的总量 (以字节为单位) 可以返回一个值,该值超出 32 位进程中 long 或 unsigned long 可表示的最大值。同样适用于通过将 sysconf (_SC_PAGESIZE) 和 sysconf (_SC_AVPHYS_PAGES) 想乘,来确定未使用的物理内存的总量 (以字节为单位)。这个问题有两个工作区。第 1 个工作区将程序作为 64 位的进程进行编译 (从而使 long 足够大到可以容纳乘法运算的结果) ,但是,这样做的缺点是得到的程序只能在 64 位的内核中运行。第 2 个工作区是用来将得到的乘法运算结果存储在一个 64 位的量中,如 longlong_t  (Solaris OS 类型) 或 long long (linux)。它的有点是可以在 32 位和 64 位的内核中正确工作。
  • 相关阅读:
    测试代码运行效率
    用宏实现的单例模式
    上传控件的按钮改为图片
    ODAC的使用笔记
    ASP.NET防止重复提交
    向SharePoint图片库添加Item
    获取页面上用户控件的子控件ID
    SharePoint的WebService的应用
    GridView中HyperLinkField的链接使用JavaScript问题
    C#日期验证的正则表达式
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3047725.html
Copyright © 2011-2022 走看看