Unix編程/應用問答中文版 —6./etc/system可調資源限制

來源:互聯網
上載者:User
發信人: 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.