• Linux系统参数配置简介


    Linux服务器在对应用程序进行优化配置的时候,经常使用到sysctl和PAM两个模块对服务器进行优化。

    sysctl内核参数配置

    使用“sysctl -a”命令可以查看所有正在使用的内核参数。内核参数比较多(一般多达500项),按照前缀主要分为以下几大类:net.ipv4、net.ipv6、net.core、vm、fs、dev.parport、dev.cdrom 、dev.raid、kernel等等。
    注:安装的组件和使用的方式不一样,正在使用的内核参数是不一样的。所有的内核参数的说明文档是放到linux-source-codeDocumentationsysctl中的,如果想知道对内核参数的说明,可以到该目录下查看相应的说明文档。

    sysctl内核参数有两种修改方法
    1) 命令设置的方式,对应内核运行配置参数
    2) 文件设置的方式,对应内核静态配置参数

    sysctl内核动态系统参数配置
    其参数保存的主要位置为/proc/sys

    使用“sysctl -w 参数名=值”的方式
    例如:把net.ipv4.ip_forward的值修改为1,使用命令“sysctl -w net.ipv4.ip_forward=1”。
    
    修改内核参数对应的proc文件
    内核参数位于/proc/sys/之下,参数名称是以文件所在的路径,并将“/”以“.”来取代。举例来说,/proc/sys/net/ip_forward的参数名称为net.ipv4.ip_forward。
    例如:把net.ipv4.ip_forward的值修改为1,使用命令“echo “1” > /proc/sys/net/ipv4/ip_forward”。
    
    注意,这里proc文件跟普通的文件不一样。一般一个文件用echo写入内容之后,会变成一个文本文件,但echo修改proc文件之后还是个空文件。

    sysctl内核静态系统参数配置
    其参数保存的主要位置为/etc/sysctl.conf,针对整个系统参数配置。文件方式的好处是内核参数设置的值可以用文件保留下来。

    内核参数默认保存在/etc/sysctl.conf文件中。修改的时候可以直接用vi编辑sysctl.conf文件,增加要修改的内核参数内容,修改的格式为:参数名=值。
    例如,把net.ipv4.ip_forward的值修改为1,在sysctl.conf中增加下面这行内容:
    
    net.ipv4.ip_forward=1
    
    文件修改好后,进行保存。
    
    使用“sysctl -p 配置文件名”来使配置生效
    如果配置文件是默认的,可以不用输配置文件名,即使用“sysctl -p”。
    
    系统重启,通过配置文件启动内核生效
    之前认为修改后的内核参数放在文件中,系统启动的时候会读这个文件,重启后设置应该不会失效。
    但经过验证,一般会失效。需要把将默认的boot.sysctl服务打开,系统启动时就会执行这个文件的设置。
    或者把修改参数的命令“
    /sbin/sysctl -e -p /etc/sysctl.conf”写入启动执行脚本文件里/etc/rc.local,这样系统重启后配置就不会失效。

    ####################

     

    PAM插入式认证模块参数配置


    其参数保存的主要位置为/etc/security/limits.conf,针对用户参数配置。

    Linux PAM(插入式认证模块,Pluggable Authentication Modules)中pam_limits.so 的配置文件,突破系统的默认限制,对系统访问资源有一定保护作用。其工作原理为当用户 访问服务器,服务程序将请求发送到PAM模块,PAM模块根据服务名称在/etc/pam.d目录下选择一个对应的服务文件,然后根据服务文件的内容选择具体的PAM模块进行处理.

    注意:要使limits.conf文件配置生效,必须要确保pam_limits.so文件被加入到启动文件中。查看程序配置文件中有"session required /lib/security/pam_limits.so"

    例如:限制admin用户登录到sshd的服务不能超过2个
    在/etc/pam.d/sshd中添加:session required pam_limits.so
    在/etc/security/limits.conf中添加:admin - maxlogins 2

    注意:查看应用程序能否被PAM支持,用ldd查看链接关系。

    $ ldd /usr/sbin/sshd
    linux-vdso.so.1 => (0x00007fffcb5fe000)
    libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007fa5412ce000)
    libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007fa5410aa000)
    libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007fa540e9b000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fa540c78000)
    libck-connector.so.0 => /usr/lib/x86_64-linux-gnu/libck-connector.so.0 (0x00007fa540a74000)
    libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007fa54082e000)
    libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fa540452000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fa54024f000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fa540035000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fa53fdfc000)
    libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fa53fbb5000)
    libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fa53f8e9000)
    libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fa53f6e5000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa53f320000)
    libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fa53f105000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa53ef01000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fa53ecc3000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fa5417b0000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa53eaa4000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa53e89c000)
    libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fa53e66d000)
    libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fa53e461000)
    libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fa53e25d000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fa53e042000)

    PAM插入式认证模块配置格式


    username|@groupname type resource limit

    username|@groupname
    设置需要被限制的用户名,组名前面加@和用户名区别。也可用通配符*来做所有用户的限制

    type
    类型有soft,hard 和 -,其中soft 指的是当前系统生效的设置值。hard表明系统中所能设定的最大值。soft的限制不能比har限制高。用 - 就表明同时设置了soft和hard的值。可以超出软规则的限制(警告),但不能超过硬规则的限制。

    resource
    表示要限制的资源

    limit
    表示资源数量

    PAM插入式认证模块配置资源


    1)core - 限制内核文件的大小,何谓core文件,当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。core文件是个二进制文件,需要用相应的工具来分析程序崩溃时的内存映像,系统默认core文件的大小为0,所以没有被创建。可以用ulimit命令查看和修改core文件的大小。

    2)date - 最大数据大小

    3)fsize - 最大文件大小

    4)memlock - 最大锁定内存地址空间

    5)nofile - 打开文件的最大数目,对于需要做许多套接字连接并使它们处于打开状态的应用程序而言,最好通过使用ulimit -n,或者通过设置nofile参数,为用户把文件描述符的数量设置得比默认值高一些

    6)rss - 最大持久设置大小

    7)stack - 最大栈大小

    8)cpu - 以分钟为单位的最多 CPU 时间

    9)noproc - 进程的最大数目

    10)as - 地址空间限制

    11)maxlogins - 此用户允许登录的最大数目

    PAM插入式认证模块配置方式
    1)暂时生效
    适用于通过ulimit命令登录shell会话期间,Ulimit命令参数
    -a 显示所有限制
    -c core文件大小的上限
    -d 进程数据段大小的上限
    -f shell所能创建的文件大小的上限
    -m 驻留内存大小的上限
    -s 堆栈大小的上限
    -t 每秒可占用的CPU时间上限
    -p 管道大小
    -n 打开文件数的上限
    -u 进程数的上限
    -v 虚拟内存的上限

    2)永久生效
    通过将一个相应的ulimit语句添加到由登录shell读取的文件之一(例如 ~/.profile),即特定于shell的用户资源文件;或者通过编辑/etc/security/limits.conf


    PAM插入式认证模块常用配置


    1)建议设置成无限制(unlimited)


    数据段长度:ulimit –d unlimited

    最大内存大小:ulimit –m unlimited

    堆栈大小:ulimit –s unlimited

    CPU 时间:ulimit –t unlimited

    虚拟内存:ulimit –v unlimited

    2)套接字应用程序
    对于需要做许多套接字连接并使它们处于打开状态的应用程序而言,最好通过使用 ulimit –n,或者通过设置/etc/security/limits.conf中的nofile 参数,为用户把文件描述符的数量设置得比默认值高一些。

    3)应用程序开发调试
    # ulimit -c 1000
    -c 指定修改core文件的大小,1000指定了core文件大小。也可以对core文件的大小不做限制,如: ulimit -c unlimited
    注意:如果想让修改永久生效,则需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf

    4)提高 Oracle 用户的 shell 限制

    首先,修改/etc/security/limits.conf
    oracle soft nproc 2047
    oracle hard nproc 16384
    oracle soft nofile 1024
    oracle hard nofile 65536

    其次,修改程序配置要求/etc/pam.d/login
    session required /lib/security/pam_limits.so

    最后,运行环境进行动态设置
    /etc/profile
    if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
    else
    ulimit -u 16384 -n 65536
    fi
    fi


    版权声明:本文为CSDN博主「lida2003」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lida2003/java/article/details/51508396

  • 相关阅读:
    Redis 笔记
    React Native
    docker run 命令
    vue 集成腾讯地图基础api Demo集合
    在uniapp H5项目中使用腾讯地图sdk
    基于UE4/Unity绘制地图
    腾讯位置服务打车乘客端小车平滑移动-安卓篇
    腾讯位置服务定位打卡功能实现
    腾讯位置服务GPS轨迹回放-安卓篇
    腾讯位置服务个性化图层创建及发布
  • 原文地址:https://www.cnblogs.com/linux985/p/13297754.html
Copyright © 2020-2023  润新知