GB | BIG5
|
| 首頁 > 編程技術 > C/C++ > 正文 |
 |
| Unix編程/應用問答中文版 ---6./etc/system可調資源限制 |
| 本文出自:http://www.nsfocus.com 維護:小四 (2002-10-24 06:02:00) |
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 <Casper.Dik@Holland.Sun.Com>
在/etc/system設置
set maxuprc = <num>
Q: maxusers參數究竟影響了什
A: Casper Dik <Casper.Dik@Holland.Sun.Com>
下面以/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=<num>
執行/usr/sbin/reboot -- -r,或者Stop-A,執行boot -r
b. 對Solaris 8,支持的偽終端數目根據需要動態改變,系統依然有一個內部限制,
但是這個值非常大。如果"pt_cnt"變量小這個內部限制,將被忽略。一般情況
下,不再需要指定"pt_cnt"變量。但還是有某些罕見的情形,需要設置"pt_cnt"
變量大內部限制。
6.3 如何增加每個進程可打開文件句柄數
A: Casper Dik <Casper.Dik@Holland.Sun.COM>
從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(http://www.research.att.com/sw/tools/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 <num> > /proc/sys/fs/file-max
6.5 做了setuid()這類調用的程序如何產生core dump
Q: 做了setuid()這類調用的程序不會產生core文件,可我需要調試這個程序。
--------------------------------------------------------------------------
/*
* gcc -Wall -O3 -o suidtest suidtest.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
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: 小四 <scz@nsfocus.com> 2001-07-30 20:14
對SPARC/Solaris 7來說,為了方便調試,執行coreadm -e proc-setid命令即可。
6.6 消息隊列調整
Q: 在/etc/system中如何調整消息隊列
A: <solaris@sean.de>
消息隊列統一使用 msgsys:msginfo_ 前綴。你可以用sysdef獲取一些缺省值,還可
以參看/usr/include/sys/msg.h頭文件了解更多信息。此外不要忘記<<APUE>>
msgsys:msginfo_msgmap
default 100 max 2147483647 <sys/msg.h> 100
msgsys:msginfo_msgmax
default 2048 max 2147483647 <sys/msg.h> 8192 typical value 2048
msgsys:msginfo_msgmnb
default 4096 max 2147483647 <sys/msg.h> 2048 typical value 4096
msgsys:msginfo_msgmni
default 50 max 2147483647 <sys/msg.h> 50 typical value 50
msgsys:msginfo_msgssz
default 8 max 2147483647 <sys/msg.h> 8
msgsys:msginfo_msgtql
default 40 max 2147483647 <sys/msg.h> 50 typical value 40
msgsys:msginfo_msgseg
default 1024 max 32767 <sys/msg.h> 1024
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
Unix編程/應用問答中文版 ---5.塊設備相關問題 (2002-10-23 06:02:00) Unix編程/應用問答中文版 ---4.系統資源相關問題 (2002-10-22 06:02:00) Unix編程/應用問答中文版 ---3.-lelf、-lkvm、-lkstat相關問題 (2002-10-21 06:02:01) Unix編程/應用問答中文版 ---2.堆棧相關問題 (2002-10-18 06:02:00) Unix編程/應用問答中文版 ---1.系統管理配置問題 (2002-10-17 06:02:00) Unix編程/應用問答中文版 ---0.簡介 Unix/C傳奇問題 (2002-10-16 06:02:01)
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |