国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Linux > 正文

linux配置文件的調(diào)優(yōu)

2024-06-28 14:33:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、limits.conf原理

工作原理

limits.conf文件實(shí)際是linux PAM(插入式認(rèn)證模塊,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,突破系統(tǒng)的默認(rèn)限制,對(duì)系統(tǒng)訪問(wèn)資源有一定保護(hù)作用。 limits.conf 和sysctl.conf區(qū)別在于limits.conf是針對(duì)用戶(hù),而sysctl.conf是針對(duì)整個(gè)系統(tǒng)參數(shù)配置。

limits.conf是pam_limits.so的配置文件,然后/etc/pam.d/下的應(yīng)用程序調(diào)用pam_***.so模塊。譬如說(shuō),當(dāng)用戶(hù)訪問(wèn)服務(wù)器,服務(wù)程序?qū)⒄?qǐng)求發(fā)送到PAM模塊,PAM模塊根據(jù)服務(wù)名稱(chēng)在/etc/pam.d目錄下選擇一個(gè)對(duì)應(yīng)的服務(wù)文件,然后根據(jù)服務(wù)文件的內(nèi)容選擇具體的PAM模塊進(jìn)行處理。

文件格式

username|@groupname   type  resource  limit 

1)username|@groupname

設(shè)置需要被限制的用戶(hù)名,組名前面加@和用戶(hù)名區(qū)別。也可用通配符*來(lái)做所有用戶(hù)的限制

2)type

類(lèi)型有soft,hard 和 -

  • soft 指的是當(dāng)前系統(tǒng)生效的設(shè)置值
  • hard 表明系統(tǒng)中所能設(shè)定的最大值,soft 的限制不能比 hard 限制高
  • - 就表明同時(shí)設(shè)置了 soft 和 hard 的值

3)resource: 表示要限制的資源

  • core - 限制內(nèi)核文件的大小
  • core file : 當(dāng)一個(gè)程序崩潰時(shí),在進(jìn)程當(dāng)前工作目錄的core文件中復(fù)制了該進(jìn)程的存儲(chǔ)圖像。core文件僅僅是一個(gè)內(nèi)存映象(同時(shí)加上調(diào)試信息),主要是用來(lái)調(diào)試的。core文件是個(gè)二進(jìn)制文件,需要用相應(yīng)的工具來(lái)分析程序崩潰時(shí)的內(nèi)存映像,系統(tǒng)默認(rèn)core文件的大小為0,所以沒(méi)有被創(chuàng)建。可以用ulimit命令查看和修改core文件的大小。 #ulimit -c 0 #ulimit -c 1000 #ulimit -c unlimited 注意:如果想讓修改永久生效,則需要修改配置文件,如 .bash_PRofile、/etc/profile或/etc/security/limits.conf
  • date - 最大數(shù)據(jù)大小
  • fsize - 最大文件大小
  • memlock - 最大鎖定內(nèi)存地址空間
  • nofile - 打開(kāi)文件的最大數(shù)目
  • 對(duì)于需要做許多套接字連接并使它們處于打開(kāi)狀態(tài)的應(yīng)用程序而言,最好通過(guò)使用ulimit -n,或者通過(guò)設(shè)置nofile參數(shù),為用戶(hù)把文件描述符的數(shù)量設(shè)置得比默認(rèn)值高一些
  • rss - 最大持久設(shè)置大小
  • stack - 最大棧大小
  • cpu - 以分鐘為單位的最多 CPU 時(shí)間
  • noproc - 進(jìn)程的最大數(shù)目
  • as - 地址空間限制
  • maxlogins - 此用戶(hù)允許登錄的最大數(shù)目

示例

限制admin用戶(hù)登錄到sshd的服務(wù)不能超 過(guò)2個(gè)

echo session required pam_limits.so >> /etc/pam.d/sshd echo admin - maxlogins 2 >> /etc/security/limits.conf
  • 查看應(yīng)用程序能否被PAM支持,用ldd
  • 同理limits.conf要使用就必須保證/etc/pam.d/login 中有下面:session required pam_limits.so

設(shè)置

  • 暫時(shí)生效,ulimit 命令
  • 永久生效,通過(guò)將一個(gè)相應(yīng)的 ulimit 語(yǔ)句添加到由登錄 shell 讀取的文件之一(例如 ~/.profile),即特定于 shell 的用戶(hù)資源文件;或者通過(guò)編輯 /etc/security/limits.conf

二、ulimit

ulimit 用于限制 shell 啟動(dòng)進(jìn)程所占用的資源,支持以下各種類(lèi)型的限制:所創(chuàng)建的內(nèi)核文件的大小、進(jìn)程數(shù)據(jù)塊的大小、Shell 進(jìn)程創(chuàng)建文件的大小、內(nèi)存鎖住的大小、常駐內(nèi)存集的大小、打開(kāi)文件描述符的數(shù)量、分配堆棧的最大大小、CPU 時(shí)間、單個(gè)用戶(hù)的最大線程數(shù)、Shell 進(jìn)程所能使用的最大虛擬內(nèi)存。同時(shí),它支持硬資源和軟資源的限制

作為臨時(shí)限制,ulimit 可以作用于通過(guò)使用其命令登錄的 shell 會(huì)話,在會(huì)話終止時(shí)便結(jié)束限制,并不影響于其他 shell 會(huì)話。而對(duì)于長(zhǎng)期的固定限制,ulimit 命令語(yǔ)句又可以被添加到由登錄 shell 讀取的文件中,作用于特定的 shell 用戶(hù)

  • 只對(duì)當(dāng)前tty(終端有效),若要每次都生效的話,可以把ulimit參數(shù)放到對(duì)應(yīng)用戶(hù)的.bash_profile里面
  • ulimit命令本身就有分軟硬設(shè)置,加-H就是硬,加-S就是軟
  • 默認(rèn)顯示的是軟限制,如果運(yùn)行ulimit命令修改的時(shí)候沒(méi)有加上的話,就是兩個(gè)參數(shù)一起改變生效

ulimit命令用來(lái)限制系統(tǒng)用戶(hù)對(duì)shell資源的訪問(wèn),常用參數(shù)解釋如下

ulimit(選項(xiàng))-a:顯示目前資源限制的設(shè)定;-c <core文件上限>:設(shè)定core文件的最大值,單位為區(qū)塊;-d <數(shù)據(jù)節(jié)區(qū)大小>:程序數(shù)據(jù)節(jié)區(qū)的最大值,單位為KB;-f <文件大小>:shell所能建立的最大文件,單位為區(qū)塊;-H:設(shè)定資源的硬性限制,也就是管理員所設(shè)下的限制;-m <內(nèi)存大小>:指定可使用內(nèi)存的上限,單位為KB;-n <文件數(shù)目>:指定同一時(shí)間最多可開(kāi)啟的文件數(shù);-p <緩沖區(qū)大小>:指定管道緩沖區(qū)的大小,單位512字節(jié);-s <堆疊大小>:指定堆疊的上限,單位為KB;-S:設(shè)定資源的彈性限制;-t <CPU時(shí)間>:指定CPU使用時(shí)間的上限,單位為秒;-u <程序數(shù)目>:用戶(hù)最多可開(kāi)啟的程序數(shù)目;-v <虛擬內(nèi)存大小>:指定可使用的虛擬內(nèi)存上限,單位為KB。

Linux是有文件句柄限制的,而且Linux默認(rèn)不是很高,一般都是1024,生產(chǎn)服務(wù)器用其實(shí)很容易就達(dá)到這個(gè)數(shù)量

系統(tǒng)的限制文件在 /proc/sys/fs/file-max 、/proc/sys/fs/file-nr中

/proc/sys/fs/file-max

決定了當(dāng)前內(nèi)核可以打開(kāi)的最大的文件句柄數(shù)

The value  in  file-max  denotes  the  maximum number of file handles that the Linux kernel will allocate. When you get a lot of error messages about running out of  file handles, you might want to raise this limit. The default value is 10% of  RAM in kilobytes.  To  change it, just  write the new number  into the file

意思是file-max一般為內(nèi)存大小(KB)的10%來(lái)計(jì)算,如果使用shell,可以這樣計(jì)算

grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'

/proc/sys/fs/file-nr

Historically, the three values in file-nr denoted the number of allocated file handles,  the number of  allocated but  unused file  handles, and  the maximum number of file handles. Linux 2.6 always  reports 0 as the number of free file handles -- this  is not an error,  it just means that the  number of allocated file handles exactly matches the number of used file handles.

查找文件句柄問(wèn)題的時(shí)候,還有一個(gè)很實(shí)用的程序lsof.可以很方便看到某個(gè)進(jìn)程開(kāi)了那些句柄.也可以看到某個(gè)文件/目錄被什么進(jìn)程占用了.

lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more

修改完重新登錄就可以見(jiàn)到,使用 ulimit -a 查看確認(rèn)

設(shè)置

  • 針對(duì)所有用戶(hù)的設(shè)置,在/etc/security/limits.conf文件,其是可以對(duì)系統(tǒng)用戶(hù)、組進(jìn)行cpu、文件數(shù)等限制的,通過(guò)它可以針對(duì)某個(gè)用戶(hù)或全部進(jìn)行限制。但不能超越系統(tǒng)的限制;
  • (*表示所有用戶(hù)、soft表示可以超出,但只是警告;hard表示絕對(duì)不能超出,unlimited用于表示不限制)如果想對(duì)所有用戶(hù)設(shè)置,也可以放在/etc/profile文件里面,下面是該文件里面的默認(rèn)參數(shù):ulimit -S -c 0 > /dev/null 2>&1

修改ulimit最大限制

1)使用命令修改

查詢(xún)當(dāng)前終端的文件句柄數(shù): ulimit -n 回車(chē),一般的系統(tǒng)默認(rèn)的1024.

修改文件句柄數(shù)為65535,ulimit -n 65535.此時(shí)系統(tǒng)的文件句柄數(shù)為65535.

2)將ulimit 值添加到/etc/profile文件中(適用于有root權(quán)限登錄的系統(tǒng))

為了每次系統(tǒng)重新啟動(dòng)時(shí),都可以獲取更大的ulimit值,將ulimit 加入到/etc/profile 文件底部

echo ulimit -n 65535 >>/etc/profilesource /etc/profileulimit -n

3)OK,好多朋友都以為大功告成了,可以突然發(fā)現(xiàn)自己再次登錄進(jìn)來(lái)的時(shí)候,ulimit的值還是1024,這是為什么呢?

關(guān)鍵的原因是你登錄的用戶(hù)是什么身份,是不是root用戶(hù),由于服務(wù)器的root用戶(hù)權(quán)限很大,一般是不能用來(lái)登錄的,都是通過(guò)自己本人的登錄權(quán)限進(jìn)行登錄,并通過(guò)sudo方式切換到root用戶(hù)下進(jìn)行工作。 用戶(hù)登錄的時(shí)候執(zhí)行sh腳本的順序:

/etc/profile.d/file /etc/profile /etc/bashrc /home/.admin/.bashrc /home/.admin/.bash_profile

由于ulimit -n的腳本命令加載在第二部分,用戶(hù)登錄時(shí)由于權(quán)限原因在第二步還不能完成ulimit的修改,所以u(píng)limit的值還是系統(tǒng)默認(rèn)的1024

解決辦法: 修改linux的軟硬件限制文件

echo '* soft nproc 11000* hard nproc 11000* soft nofile 655350* hard nofile 655350' >> /etc/security/limits.conf

4)經(jīng)過(guò)以上修改,在有些系統(tǒng)中,用一般用戶(hù)再登陸,仍然沒(méi)有修改過(guò)來(lái),那么需要檢查是否有如下文件,如果沒(méi)有,則要添加如下內(nèi)容:

echo session required /lib/security/pam_limits.so >> /etc/pam.d/sshdservice sshd reload

5)如果仍然不行,那么需要修改如下文件

echo UsePrivilegeSeparation no >>  /etc/ssh/sshd_config

ulimit -n and /proc/sys/fs/file-max 有什么區(qū)別

1、file-max  是內(nèi)核級(jí)別的,所有的進(jìn)程總和不能超過(guò)這個(gè)數(shù)

2、ulimit是進(jìn)程級(jí)別的

me@superme:~$ ulimit -n1024me@superme:~$ lsof | grep me | wc -l8145#!/usr/bin/perl$count = 0;@filedescriptors;while ($count <= 1024) {    $FILE = ${count};    open $FILE, ">", "/tmp/example$count" or die "/n/n FDs: $count $!";    push(@filedescriptors, $FILE);    $count ++;}//FDs: 1021 Too many open files at ./test.pl line 8.//1021 because there were 3 open file descriptors before reaching the while loop (stdout, stdin and stderr)

 

三、關(guān)閉IPV6

目前為止我們還不需要IPv6,系統(tǒng)安裝完之后是自帶并且開(kāi)啟了的,需要我們關(guān)閉

ifconfig | grep inet6  || lsmod | grep ipv6

1、如果出現(xiàn)inet6 addr…的字樣,說(shuō)明就是安裝了

2、顯示內(nèi)核加載的ipv6相關(guān)模塊

通過(guò)以下命令禁用 

sed -i 's/^NETWORKING_IPV6=yes/NETWORKING_IPV6=no/' /etc/sysconfig/networkecho 'alias net-pf-10 offalias ipv6 off ' >> /etc/modprobe.d/dist.confchkconfig ip6tables off

四、sysctl.conf工作原理

sysctl命令被用于在內(nèi)核運(yùn)行時(shí)動(dòng)態(tài)地修改內(nèi)核的運(yùn)行參數(shù),可用的內(nèi)核參數(shù)在目錄/proc/sys中。它包含一些TCP/IP堆棧和虛擬內(nèi)存系統(tǒng)的高級(jí)選項(xiàng), 這可以讓有經(jīng)驗(yàn)的管理員提高引人注目的系統(tǒng)性能。用sysctl可以讀取設(shè)置超過(guò)五百個(gè)系統(tǒng)變量

sysctl.conf設(shè)置

這是一個(gè)在網(wǎng)絡(luò)上流傳依舊的sysctl.conf優(yōu)化配置sysctl.conf設(shè)置

#禁用包過(guò)濾功能net.ipv4.ip_forward = 0#啟用源路由核查功能net.ipv4.conf.default.rp_filter = 1#禁用所有IP源路由net.ipv4.conf.default.accept_source_route = 0#使用sysrq組合鍵是了解系統(tǒng)目前運(yùn)行情況,為安全起見(jiàn)設(shè)為0關(guān)閉kernel.sysrq = 0#控制core文件的文件名是否添加pid作為擴(kuò)展kernel.core_uses_pid = 1#開(kāi)啟SYN Cookies,當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來(lái)處理net.ipv4.tcp_syncookies = 1#每個(gè)消息隊(duì)列的大?。▎挝唬鹤止?jié))限制kernel.msgmnb = 65536#整個(gè)系統(tǒng)最大消息隊(duì)列數(shù)量限制kernel.msgmax = 65536#單個(gè)共享內(nèi)存段的大?。▎挝唬鹤止?jié))限制,計(jì)算公式64G*1024*1024*1024(字節(jié))kernel.shmmax = 68719476736#所有內(nèi)存大?。▎挝唬喉?yè),1頁(yè) = 4Kb),計(jì)算公式16G*1024*1024*1024/4KB(頁(yè))kernel.shmall = 4294967296#timewait的數(shù)量,默認(rèn)是180000net.ipv4.tcp_max_tw_buckets = 6000#開(kāi)啟有選擇的應(yīng)答net.ipv4.tcp_sack = 1#支持更大的TCP窗口. 如果TCP窗口最大超過(guò)65535(64K), 必須設(shè)置該數(shù)值為1net.ipv4.tcp_window_scaling = 1#TCP讀buffernet.ipv4.tcp_rmem = 4096 131072 1048576#TCP寫(xiě)buffernet.ipv4.tcp_wmem = 4096 131072 1048576#為T(mén)CP socket預(yù)留用于發(fā)送緩沖的內(nèi)存默認(rèn)值(單位:字節(jié))net.core.wmem_default = 8388608#為T(mén)CP socket預(yù)留用于發(fā)送緩沖的內(nèi)存最大值(單位:字節(jié))net.core.wmem_max = 16777216#為T(mén)CP socket預(yù)留用于接收緩沖的內(nèi)存默認(rèn)值(單位:字節(jié))net.core.rmem_default = 8388608#為T(mén)CP socket預(yù)留用于接收緩沖的內(nèi)存最大值(單位:字節(jié))net.core.rmem_max = 16777216#每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目net.core.netdev_max_backlog = 262144#web應(yīng)用中l(wèi)isten函數(shù)的backlog默認(rèn)會(huì)給我們內(nèi)核參數(shù)的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認(rèn)為511,所以有必要調(diào)整這個(gè)值net.core.somaxconn = 262144#系統(tǒng)中最多有多少個(gè)TCP套接字不被關(guān)聯(lián)到任何一個(gè)用戶(hù)文件句柄上。這個(gè)限制僅僅是為了防止簡(jiǎn)單的DoS攻擊,不能過(guò)分依靠它或者人為地減小這個(gè)值,更應(yīng)該增加這個(gè)值(如果增加了內(nèi)存之后)net.ipv4.tcp_max_orphans = 3276800#記錄的那些尚未收到客戶(hù)端確認(rèn)信息的連接請(qǐng)求的最大值。對(duì)于有128M內(nèi)存的系統(tǒng)而言,缺省值是1024,小內(nèi)存的系統(tǒng)則是128net.ipv4.tcp_max_syn_backlog = 262144#時(shí)間戳可以避免序列號(hào)的卷繞。一個(gè)1Gbps的鏈路肯定會(huì)遇到以前用過(guò)的序列號(hào)。時(shí)間戳能夠讓內(nèi)核接受這種“異常”的數(shù)據(jù)包。這里需要將其關(guān)掉net.ipv4.tcp_timestamps = 0#為了打開(kāi)對(duì)端的連接,內(nèi)核需要發(fā)送一個(gè)SYN并附帶一個(gè)回應(yīng)前面一個(gè)SYN的ACK。也就是所謂三次握手中的第二次握手。這個(gè)設(shè)置決定了內(nèi)核放棄連接之前發(fā)送SYN+ACK包的數(shù)量net.ipv4.tcp_synack_retries = 1#在內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量net.ipv4.tcp_syn_retries = 1#開(kāi)啟TCP連接中time_wait sockets的快速回收net.ipv4.tcp_tw_recycle = 1#開(kāi)啟TCP連接復(fù)用功能,允許將time_wait sockets重新用于新的TCP連接(主要針對(duì)time_wait連接)net.ipv4.tcp_tw_reuse = 1#1st低于此值,TCP沒(méi)有內(nèi)存壓力,2nd進(jìn)入內(nèi)存壓力階段,3rdTCP拒絕分配socket(單位:內(nèi)存頁(yè))net.ipv4.tcp_mem = 94500000 915000000 927000000#如果套接字由本端要求關(guān)閉,這個(gè)參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時(shí)間。對(duì)端可以出錯(cuò)并永遠(yuǎn)不關(guān)閉連接,甚至意外當(dāng)機(jī)。缺省值是60 秒。2.2 內(nèi)核的通常值是180秒,你可以按這個(gè)設(shè)置,但要記住的是,即使你的機(jī)器是一個(gè)輕載的WEB服務(wù)器,也有因?yàn)榇罅康乃捞捉幼侄鴥?nèi)存溢出的風(fēng)險(xiǎn),F(xiàn)IN- WAIT-2的危險(xiǎn)性比FIN-WAIT-1要小,因?yàn)樗疃嘀荒艹缘?.5K內(nèi)存,但是它們的生存期長(zhǎng)些。net.ipv4.tcp_fin_timeout = 15#表示當(dāng)keepalive起用的時(shí)候,TCP發(fā)送keepalive消息的頻度(單位:秒)net.ipv4.tcp_keepalive_time = 30#對(duì)外連接端口范圍net.ipv4.ip_local_port_range = 2048 65000#表示文件句柄的最大數(shù)量fs.file-max = 102400

這是我在實(shí)際生產(chǎn)系統(tǒng)自動(dòng)化部署中用的配置

net.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route = 0kernel.sysrq = 0kernel.core_uses_pid = 1net.ipv4.tcp_syncookies = 1kernel.msgmnb = 65536kernel.msgmax = 65536kernel.shmmax = 68719476736kernel.shmall = 4294967296net.ipv4.tcp_max_tw_buckets = 6000net.ipv4.tcp_sack = 1net.ipv4.tcp_window_scaling = 1net.ipv4.tcp_wmem = 8192 4336600 873200net.ipv4.tcp_rmem = 32768 4336600 873200net.core.wmem_default = 8388608net.core.rmem_default = 8388608net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.core.netdev_max_backlog = 262144net.core.somaxconn = 262144net.ipv4.tcp_max_orphans = 3276800net.ipv4.tcp_max_syn_backlog = 262144net.ipv4.tcp_timestamps = 1net.ipv4.tcp_synack_retries = 1net.ipv4.tcp_syn_retries = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_mem = 786432 1048576 1572864net.ipv4.tcp_fin_timeout = 30#net.ipv4.tcp_keepalive_time = 30net.ipv4.tcp_keepalive_time = 300net.ipv4.ip_local_port_range = 1024 65000

/sbin/sysctl -p最后記得刷新立即生效

 

http://serverfault.com/questions/122679/how-do-ulimit-n-and-proc-sys-fs-file-max-differ


上一篇:LinuxMono安裝步驟

下一篇:Linuxoprofile命令

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 毕节市| 大方县| 张掖市| 潜江市| 乌什县| 宣化县| 胶州市| 福贡县| 巍山| 周宁县| 屯门区| 霍邱县| 石城县| 武山县| 文安县| 望城县| 莎车县| 开平市| 曲周县| 沙湾县| 赤壁市| 广丰县| 娄烦县| 漾濞| 五常市| 大邑县| 繁昌县| 电白县| 保德县| 深圳市| 金昌市| 福海县| 尼木县| 江陵县| 聊城市| 佳木斯市| 镇康县| 鄄城县| 边坝县| 乌鲁木齐市| 偏关县|