精华内容
下载资源
问答
  • linux进程资源限制

    千次阅读 2019-05-14 10:07:22
    前台进程、后台进程没有脱离shell,其父进程都为shell进程,其资源限制也继承至相应shell进程,可用ulimit工具修改其资源限制 ulimit -a 查看当前shell所有资源限制 ulimit -n 查看当前shell能打开的文件总数 参考...

    linux进程可分为前台进程、后台进程、守护进程

    前台进程、后台进程没有脱离shell,其父进程都为shell进程,其资源限制也继承至相应shell进程,可用ulimit工具修改其资源限制
    ulimit -a 查看当前shell所有资源限制
    ulimit -n 查看当前shell能打开的文件总数
    参考文档:https://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/index.html

    守护进程脱离的shell,其父进程为init进程(旧版)或systemd进程(新版)
    以父进程为systemd进程的守护进程为例:
    其全局配置位于:
    /etc/systemd/system.conf 和 /etc/systemd/user.conf(修改后重启系统生效)

    DefaultLimitCPU=
    DefaultLimitFSIZE=
    DefaultLimitDATA=
    DefaultLimitSTACK=
    DefaultLimitCORE=
    DefaultLimitRSS=
    DefaultLimitNOFILE=
    DefaultLimitAS=
    DefaultLimitNPROC=
    DefaultLimitMEMLOCK=
    DefaultLimitLOCKS=
    DefaultLimitSIGPENDING=
    DefaultLimitMSGQUEUE=
    DefaultLimitNICE=
    DefaultLimitRTPRIO=
    DefaultLimitRTTIME=
    

    也可对单个service配置资源限制:
    以nginx服务为例:
    其配置文件为:/usr/lib/systemd/system/nginx.service(修改后执行systemctl daemon-reload并重启服务生效)

    [Service]
    LimitCORE=infinity
    LimitNOFILE=100000
    LimitNPROC=100000
    

    其他:
    查看指定进程资源限制:
    cat /proc/<进程id>/limits
    内核参数:
    fs.file-max 设置系统打开的最大文件数
    fs.nr_open 设置打个进程能打开的最大文件数

    展开全文
  • Linux进程资源限制

    2018-03-30 14:31:04
    linux系统下启动运行一个进程时,可对该进程运行时可占用的资源进行限制进程资源限制通常是在系统初始化时由init进程建立的,然后后续进程继承。用法:#include &lt;sys/resource.h&gt;int getrlimit...

    在linux系统下启动运行一个进程时,可对该进程运行时可占用的资源进行限制。

    进程的资源限制通常是在系统初始化时由init进程建立的,然后后续进程继承。

    用法:

    #include <sys/resource.h>

    int getrlimit(int resource, struct rlimit *rlim);
    int setrlimit(int resource, const struct rlimit *rlim);

    可以获取当前进程的限制值和设定限制值。

    还有一种方式,使用shell的内建命令 ulimit :用于shell启动进程所占用的资源。

    每种资源都有软限制和硬限制两种:

    硬限制可以在任何时候任何进程中设置,只能由超过用户提起。

    软限制是内核实际执行的值,软限制可以设置为任意小于等于硬限制值。

    更改资源限制时,有三条原则:

    1、软限制值必须小于等于硬限制值。

    2、普通用户只能调低硬限制值,并且是不可逆的。

    3、超级用户可以提高硬限制值。

    常进行限制的资源类型:

    名称意义
    RLIMIT_AS进程总共可用的内存大小的最大值
    RLIMIT_COREcore文件的最大尺寸,如果为0说明不能创建core文件
    RLIMIT_CPUCPU时间的最大值(单位:秒)
    RLIMIT_DATA数据段大小的最大值
    RLIMIT_FSIZE创建文件的大小的最大值
    RLIMIT_LOCKS进程可建立的文件锁的数量的最大值
    RLIMIT_MEMLOCK进程中使用mlock锁定内存的最大尺寸
    RLIMIT_NOFILE进程中文件的打开数量的最大值
    RLIMIT_NPROC每个real user id的子进程数量的最大值
    RLIMIT_RSS最大常驻存储区大小
    RLIMIT_SBSIZEsocket缓冲的大小的最大值
    RLIMIT_STACK栈的最大尺寸
    RLIMIT_VMEM=RLIMIT_AS

    当进程使用资源超过这个限制,会收到系统内核的限制,通过信号进行通知。

    如,设定了CPU的使用限制。若进程使用达到软限制后,内核会发送一个SIGXCPU信号,默认处理机制是会终止进程,但是进程可以捕获该信号,如果继续消耗CPU时间,直到达到硬限制,内核会直接发送SIGKILL信号。

    进程栈的最大字节长度,若超出该限制会收到SIGSEGV信号。


    工程实践:

    常用的限制值。

    实存,虚存,core文件大小,cpu亲合力(指定进程仅在指定处理器上运行),进程优先级,cpu使用率。


    代码实践:

    void SetRssLimit(){

        struct rlimit rl;

        rl.rlim_cur = FLAGS_rss_limit_mb << 20 ;//mb convert to bytes.

        rl.rlim_max = RLIM_INFINITY;

        setrlimit(RLIMIT_RSS,&rl);

    }


    展开全文
  • Linux进程资源限制

    千次阅读 2015-03-18 11:40:41
    Linux中每个进程都有一组资源限制,其中一些可以通过下列函数进行查询和更改:#include #include int getrlimit(int resource,struct rlimit *rlptr); int setrlimit(int resource,struct rlimit *rlptr); 两个...

    在Linux中每个进程都有一组资源限制,其中一些可以通过下列函数进行查询和更改:

    #include <sys/resource.h>
    #include <sys/time.h>
    int getrlimit(int resource,struct rlimit *rlptr);
    int setrlimit(int resource,struct rlimit *rlptr); 
    
    两个函数的返回值:若成功,返回0;若出错,返回-1,并设置相应的errno

    其中rlimit结构体为

    struct rlimit
    {
        rlim_t rlim_cur; //rlim_cur为指定的资源指定当前的系统软限制
        rlim_t rlim_max; //rlim_max为指定的资源指定当前的系统硬限制
    };

    第一个参数为资源类型

    资源限制类型概要描述如下:

    • RLIMIT_CORE

    core文件的最大字节数,若其值为0则阻止创建core文件。

    • RLIMIT_CPU

    CPU时间的最大量值(秒),当超过此软限制时,向该进程发送S I G X C P U信号。

    • RLIMIT_DATA

    一个进程的数据段最大字节长度。数据段中初始化数据、非初始化数据以及堆的总和。当调用函数brk动态改变一个进程的数据段大小时,若失败,errno值将被设置为ENOMEM。

    • RLIMIT_FSIZE

    可以创建的文件的最大字节长度。当超过此软限制时,则向该进程发送SIGXFSZ信号。

    • RLIMIT_NOFILE

    每个进程能打开的最多文件数。

    • RLIMIT_STACK

    栈的最大字节长度。系统不会动态增加栈的大小限制。
    在进程内部,setrlimit()将增加限制以适合您的栈大小,而不会移动当前内存段来允许增长。为了保证进程的栈能够增长,限制必须首先改变以适应运行进程使用的新栈大小。
    在一个多线程的进程中,若在线程中调用setrlimit(),而该线程不是主线程,则对于栈的限制没有任何改变。使用参数RLIMIT_STACK来调用setrlimit()仅仅能够影响主线程的栈,并且该工作本来就应该由主线程来完成。
    当超越栈大小限制时,信号SIGSEGV会发给进程。如果进程忽略该信号,或者捕捉该信号但是没有设置处理措施,该信号默认设置为SIG_DFL处理方案。

    • RLIMIT_VMEM

    可映照地址空间的最大字节长度(和RLIMIT_AS相同)。

    • RLIMIT_AS

    进程可用内存最大字节数。

    - 使用注意

    当设置RLIMIT_DATA时,如果被接受,malloc函数可能失败,并设置errno为ENOMEM。

    在Linux中,使用mmap()分配的内存不再计入数据段中,而sbrk()和brk()分配的内存才是数据段的一部分。最近的POSIX.1不再指定brk(),许多操作系统也不再将brk()作为系统调用,而是用mmap()替换。最新版的glibc使用mmap()实现malloc内存分配,所以RLIMIT_DATA限制对glibc的malloc函数没有作用。

    因此,如果需要限制动态内存分配,设置RLIMIT_AS限制即可。

    展开全文
  • 本文介绍如何限制进程资源。 SysV init 以前我们用的是init启动。如果要限制进程资源,可以修改/etc/security/limits.conf文件。 但是呢,我们systemd不吃这个一套。 systemd 在systemd中,如果要限制资源,...

    本文介绍如何限制进程资源。

    SysV init

    以前我们用的是init启动。如果要限制进程资源,可以修改/etc/security/limits.conf文件。

    但是呢,我们systemd不吃这个一套。

    systemd

    在systemd中,如果要限制资源,需要修改/etc/systemd/system.conf/etc/systemd/system.conf文件。

    注意事项,修改/etc/systemd/system.conf后,需要执行systemctl daemon-reexec命令来重新加载配置。

    各参数含义

    虽然他们读取的配置不会,还存在很多的差异,但是都是使用方式的差异。它们底层控制的资源还是相同的。

    下面只是一个概览(有关详细内容及微妙例外情况,强烈建议参考setrlimit(2)手册):

    Directive in systemd Unit in systemd ulimit equivalent Description
    LimitCPU= ulimit -t Seconds  
    LimitCPU= ulimit -t Seconds  
    LimitFSIZE= ulimit -f Bytes  
    LimitDATA= ulimit -d Bytes  
    LimitSTACK= ulimit -s Bytes  
    LimitCORE= ulimit -c Bytes  
    LimitRSS= ulimit -m Bytes  
    LimitNOFILE= ulimit -n Number of File Descriptors 文件描述符的个数
    LimitAS= ulimit -v Bytes  
    LimitNPROC= ulimit -u Number of Processes 当前用户允许创建的进程数。如果超过或等于该值,在fork(2)时会失败。
    LimitMEMLOCK= ulimit -l Bytes  
    LimitLOCKS= ulimit -x Number of Locks  
    LimitSIGPENDING= ulimit -i Number of Queued Signals  
    LimitMSGQUEUE= ulimit -q Bytes  
    LimitNICE= ulimit -e Nice Level  
    LimitRTPRIO= ulimit -r Realtime Priority  
    LimitRTTIME= No equivalent Microseconds  

    如何查看指定服务的限制?

    我没有找到特定的命令,但是有一个从操作系统中查看的方法:cat /proc/<PID>/limits

    其他内容

    系统最大支持的进程数可以通过sysctl kernel.pid_max或者通过cat /proc/sys/kernel/pid_max命令查看。如果要修改,通过配置/etc/sysctl.conf配置文件即可。这又是另外一个话题了。

    相关链接

    Administration > MongoDB Performance > UNIX ulimit Settings

    相关文章

    「Linux」- 如何结束进程?

    参考文献

    Systemd services and resource limits
    Systemd/systemd.exec
    How to Set Limits on User Running Processes in Linux
    Maximum number of processes in linux
    Setting limits with ulimit

    展开全文
  • 每个Linux系统管理员都应该知道如何验证硬件、资源和主要进程的完整性和可用性。另外,基于每个用户设置资源限制也是其中一项必备技能。在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工作的方法,这些...
  • unix/linux 系统 进程资源限制参数

    千次阅读 2012-04-18 22:10:15
    下面列表为unix/linux 系统单进程资源参数限制,服务器开发中 RLIMIT_CORE 参数用得多(当需要产生core dump时)。 代码片段:  memset(&limit, 0, sizeof(limit)); limit.rlim_cur = RLIM_INFINITY; ...
  • 控制进程资源的变量 RLIMIT_AS 进程总的可用存储空间的最大长度(字节),这影响到sbrk函数和mmap函数 RLIMIT_CORE core文件的最大字节数,若其值为0则阻止创建core文件 RLIMIT_CPU CPU时间的最大量值(秒),当超过此软...
  • Linux系统中,Resouce limit指在一个进程的执行过程中,它所能得到的资源限制,比如进程的core file的最大值,虚拟内存的最大值等。soft limit 和 hard limit: soft limit是指内核所能支持的资源上限。比如对于...
  • 每个 Linux 系统管理员都应该知道如何验证硬件、资源和主要进程的完整性和可用性。另外,基于每个用户设置资源限制也是其中一项必备技能。 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工作的方法,这些...
  • 每个 Linux 系统管理员都应该知道如何验证硬件、资源和主要进程的完整性和可用性。另外,基于每个用户设置资源限制也是其中一项必备技能。
  • 每种资源都有相关的软硬限制,软限制是内核强加给相应资源限制值,硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其...
  • #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <...void printf_linux_res(const char* n
  • Linux下的进程资源限制ulimit命令

    千次阅读 2015-10-11 23:40:52
    1 进程资源限制 Linux系统中,Resource limit指在一个进程的执行中,它所能得到的资源的限制。如core file的最大值,虚拟内存的最大值等。 Resource Limit的大小可以直接影响进程的执行状况。 进程的资源限制通常是...
  • Linux查看进程所使用资源限制

    千次阅读 2016-08-05 18:41:18
    查看方法:ulimit -a 软限制 ...下面是Ubuntu12.04 x64系统下,进程资源限制情况: core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size 
  • 每个 Linux 系统管理员都应该知道如何验证硬件、资源和主要进程的完整性和可用性。另外,基于每个用户设置资源限制也是其中一项必备技能。 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工作的方法,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,600
精华内容 640
关键字:

linux限制进程资源

linux 订阅