Linux服務器在對應用程序進行優化配置的時候,經常使用到sysctl和PAM兩個模塊對服務器進行優化。
sysctl內核參數配置
使用“sysctl -a”命令可以查看所有正在使用的內核參數。內核參數比較多(一般多達500項),按照前綴主要分為以下幾大類:net.ipv4、net.ipv6、net.core、vm、fs、dev.parport、dev.cdrom 、dev.raid、kernel等等。
注:安裝的組件和使用的方式不一樣,正在使用的內核參數是不一樣的。所有的內核參數的說明文檔是放到linux-source-code\Documentation\sysctl中的,如果想知道對內核參數的說明,可以到該目錄下查看相應的說明文檔。
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