Unix程式設計/應用問答中文版 ---6./etc/system可調資源限制(轉)

post0發表於2007-08-10
Unix程式設計/應用問答中文版 ---6./etc/system可調資源限制(轉)[@more@]

作者:不祥 [文章出自: ]

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 =

* 系統所允許的最大程式數,通常最多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()。

A: qaz@smth.org

檢查當前設定

# 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: planck.bbs@bbs.nju.edu.cn

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 ", ( int )getuid(), ( int )geteuid() );

printf( "Result of seteuid( 500 ) = %d ", seteuid( 500 ) );

printf( "Current uid = %d euid = %d ", ( int )getuid(), ( int )geteuid() );

creat( "/tmp/scz_blah", S_IRWXU );

printf( "Result of setuid( 0 ) = %d ", setuid( 0 ) );

printf( "Current uid = %d euid = %d ", ( 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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940480/,如需轉載,請註明出處,否則將追究法律責任。

相關文章