• Unix编程/应用问答中文版 6./etc/system可调资源限制


    发信人: dean (叮叮当当), 信区: LinuxDev
    标  题: Unix编程/应用问答中文版 ---6./etc/system可调资源
    发信站: 飘渺水云间 (Fri Nov 22 12:02:19 2002), 转信

    Unix编程/应用问答中文版 ---6./etc/system可调资源限制


    本文出自:[url]http://www.nsfocus.com[/url] 维护:小四


    6. /etc/system可调资源限制
    6.1 Solaris下如何限制每个用户可拥有的最大进程数
    6.2 如何配置系统使之支持更多的伪终端
    6.3 如何增加每个进程可打开文件句柄数
    6.4
    6.5 做了setuid()这类调用的程序如何产生core dump
    6.6 消息队列调整
    --------------------------------------------------------------------------

    6. /etc/system可调资源限制

    6.1 Solaris下如何限制每个用户可拥有的最大进程数

    A: Casper Dik

    在/etc/system设置
    set maxuprc =

    Q: maxusers参数究竟影响了什么

    A: Casper Dik

    下面以/etc/system语法格式举例说明:

    *
    set maxusers = <以MB为单位计的可用物理内存数量>

    * 系统所允许的最大进程数,通常最多30000
    set max_nprocs = 10 + 16 * maxusers

    * 每个用户可以拥有的最大进程数(为超级用户保留5个)
    set maxuprc = max_nprocs - 5;

    # sysdef | sed -n '/System Configuration/,$p'

    6.2 如何配置系统使之支持更多的伪终端

    A: Argoth

    不要试图通过'/usr/bin/adb -k'到达目的。

    a. 如果Solaris版本小于7,修改/etc/system,增加如下行

    set pt_cnt=

    执行/usr/sbin/reboot -- -r,或者Stop-A,执行boot -r

    b. 对于Solaris 8,支持的伪终端数目根据需要动态改变,系统依然有一个内部限制,
    但是这个值非常大。如果"pt_cnt"变量小于这个内部限制,将被忽略。一般情况
    下,不再需要指定"pt_cnt"变量。但还是有某些罕见的情形,需要设置"pt_cnt"
    变量大于内部限制。

    6.3 如何增加每个进程可打开文件句柄数

    A: Casper Dik

    从Solaris 2.4开始,可以通过修改/etc/system实现

    * set hard limit on file descriptors
    set rlim_fd_max = 4096
    * set soft limit on file descriptors
    set rlim_fd_cur = 1024

    软限制超过256时,某些应用程序会出问题,尤其BCP程序。软限制超过1024时,那些
    使用select()的应用程序可能会出问题。Solaris 7之前,select()使用的文件句柄
    数不能超过1024。Solaris 2.6的RPC代码被重写过了,使用poll()代替select(),可
    以使用超过1024的文件句柄。Solaris 2.6之前,如果软限制超过1024,所有RPC服务
    很可能崩溃。

    Solaris 7下select()可以使用最多达65536的文件句柄,64-bit应用程序缺省情况如
    此。如果是32-bit应用程序,需要指定给FD_SETSIZE一个更大的值,重新编译。

    如果程序使用标准输入/输出(stdio),或者调用那些使用stdio的库函数,当打开的
    文件超过256时,程序可能会出问题,这个限制是stdio的限制。当程序需要大量文件
    句柄时,应该想办法保留一些小数字的文件句柄,让stdio使用它们。

    Solaris 7下64-bit应用程序不再受这个stdio限制的影响。如果你的确需要超过256
    个FILE *,而又不能使用Solaris 7,或者需要运行32-bit代码,考虑使用来自AT&T
    的SFIO([url]http://www.research.att.com/sw/tools/sfio/[/url])。

    A: [email]qaz@smth.org[/email]

    检查当前设置

    # ulimit -H -n
    1024
    # ulimit -S -n
    64
    #

    对于Solaris,建议修改/etc/system后重启

    * set hard limit on file descriptors
    set rlim_fd_max=0x8000
    * set soft limit on file descriptors
    set rlim_fd_cur=0x8000

    然后 ulimit -S -n 8192

    对于Linux

    echo 65536 > /proc/sys/fs/file-max

    然后 ulimit -S -n 8192

    对于FreeBSD

    编辑/etc/sysctl.conf文件(或者sysctl -w,参看SYSCTL.CONF(5))
    kern.maxfiles=65536
    kern.maxfilesperproc=32768

    Q: Linux下如何加大系统可以打开的文件数

    A: [email]planck.bbs@bbs.nju.edu.cn[/email]

    echo > /proc/sys/fs/file-max

    6.5 做了setuid()这类调用的程序如何产生core dump

    Q: 做了setuid()这类调用的程序不会产生core文件,可我需要调试这个程序。

    --------------------------------------------------------------------------
    /*
    * gcc -Wall -O3 -o suidtest suidtest.c
    */
    #include
    #include
    #include
    #include
    #include
    #include

    int main ( int argc, char * argv[] )
    {
    int *ptr = NULL;

    printf( "Current uid = %d euid = %d\n", ( int )getuid(), ( int )geteuid() );
    printf( "Result of seteuid( 500 ) = %d\n", seteuid( 500 ) );
    printf( "Current uid = %d euid = %d\n", ( int )getuid(), ( int )geteuid() );
    creat( "/tmp/scz_blah", S_IRWXU );
    printf( "Result of setuid( 0 ) = %d\n", setuid( 0 ) );
    printf( "Current uid = %d euid = %d\n", ( int )getuid(), ( int )geteuid() );
    *ptr = 0;
    return( EXIT_SUCCESS );
    } /* end of main */
    --------------------------------------------------------------------------

    # gcc -Wall -O3 -o suidtest suidtest.c
    # strip suidtest
    # file suidtest
    suidtest: ELF 32-位 MSB 可执行 SPARC 版本 1,动态链接,除去
    # ls -l suidtest
    -rwxr-xr-x 1 root other 4988 6月 29 21:21 suidtest*
    # ./suidtest
    Current uid = 0 euid = 0
    Result of seteuid( 500 ) = 0
    Current uid = 0 euid = 500
    Result of setuid( 0 ) = 0
    Current uid = 0 euid = 0
    段错误
    # ls -l core
    core: 无此文件或目录
    #

    这个程序应该core dump,但是现在没有core文件产生。注意,此时suidtest仅仅是
    自己调用了setuid(),并非被"chmod u+s suidtest"过。有无/etc/system内核可配
    置参数改变这种行为。

    A: Sun Microsystems 2001-04-11

    出于安全考虑,suid程序以及调用setuid()的程序缺省情况下不产生core dump。如
    果确实需要产生core dump以便进行调试,修改/etc/system文件并重启系统

    * 缺省该值为0,此时禁止suid程序以及调用setuid()的程序core dump
    set allow_setid_core = 1

    对于Solaris 2.6,需要先打补丁105181-22或更高版本,才能使用上述技术。对于
    7及其更高版本的Solaris操作系统,不需要任何补丁。

    A: 小四 2001-07-30 20:14

    对于SPARC/Solaris 7来说,为了方便调试,执行coreadm -e proc-setid命令即可。

    6.6 消息队列调整

    Q: 在/etc/system中如何调整消息队列

    A:

    消息队列统一使用 msgsys:msginfo_ 前缀。你可以用sysdef获取一些缺省值,还可
    以参看/usr/include/sys/msg.h头文件了解更多信息。此外不要忘记<>

    msgsys:msginfo_msgmap

    default 100 max 2147483647 100

    msgsys:msginfo_msgmax

    default 2048 max 2147483647 8192 typical value 2048

    msgsys:msginfo_msgmnb

    default 4096 max 2147483647 2048 typical value 4096

    msgsys:msginfo_msgmni

    default 50 max 2147483647 50 typical value 50

    msgsys:msginfo_msgssz

    default 8 max 2147483647 8

    msgsys:msginfo_msgtql

    default 40 max 2147483647 50 typical value 40

    msgsys:msginfo_msgseg

    default 1024 max 32767 1024
  • 相关阅读:
    js实现倒计时
    CSS解决ul下面最后一个li的margin
    js手动定时清除localStorage
    js应用中的小细节-时间戳的转换和input输入框有效数字
    javaScript将string转换成array,并将汉字按汉语拼音排序方法
    CSS3属性之text-overflow:ellipsis,指定多行文本中任意一行显示...
    移动端下拉刷新,向后台请求数据
    进程 线程 协程
    网络编程
    flask 2 进阶
  • 原文地址:https://www.cnblogs.com/aquester/p/9892006.html
Copyright © 2020-2023  润新知