ulimit、limits.conf晒衩、sysctl和proc文件系統(tǒng)

引言

當(dāng)修改一個(gè)Linux系統(tǒng)參數(shù)或限制嗤瞎,比如文件打開數(shù)時(shí),之前用到過的方式有ulimit听系、limits.conf贝奇、sysctl和/proc文件系統(tǒng)。
對(duì)這幾個(gè)東西一直比較困惑靠胜,翻了幾篇文檔掉瞳,簡(jiǎn)單寫一下它們之間的區(qū)別。

ulimit

什么是ulimit

ulimit是linux shell的內(nèi)鍵命令髓帽,它具有一套參數(shù)集菠赚,用于對(duì) shell進(jìn)程 及其 子進(jìn)程 進(jìn)行 資源限制
例如用戶同時(shí)運(yùn)行了兩個(gè)shell終端進(jìn)程郑藏,只在其中一個(gè)環(huán)境中執(zhí)行了ulimit – s 100衡查,則該shell進(jìn)程里創(chuàng)建文件的大小會(huì)有相應(yīng)的限制,而另一個(gè)shell終端包括其上運(yùn)行的子程序都不會(huì)受其影響必盖。

ulimit的設(shè)定值是 per-process 的拌牲,也就是說,每個(gè)進(jìn)程有自己的limits值歌粥。
使用ulimit進(jìn)行修改塌忽,是 立即生效 的。
ulimit只影響shell進(jìn)程及其子進(jìn)程失驶,用戶登出后失效土居。
可以在profile中加入ulimit的設(shè)置,變相的做到永久生效。

查看ulimit的設(shè)定值

使用ulimit -a可以查看所有的設(shè)定值:

pi@raspberrypi:~ $ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7336
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 95
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7336
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ulimit的參數(shù)

  • -H 設(shè)置硬件資源限制.
  • -S 設(shè)置軟件資源限制.
  • -a 顯示當(dāng)前所有的資源限制.
  • -c size:設(shè)置core文件的最大值.單位:blocks
  • -d size:設(shè)置數(shù)據(jù)段的最大值.單位:kbytes
  • -f size:設(shè)置創(chuàng)建文件的最大值.單位:blocks
  • -l size:設(shè)置在內(nèi)存中鎖定進(jìn)程的最大值.單位:kbytes
  • -m size:設(shè)置可以使用的常駐內(nèi)存的最大值.單位:kbytes
  • -n size:設(shè)置內(nèi)核可以同時(shí)打開的文件描述符的最大值.單位:n
  • -p size:設(shè)置管道緩沖區(qū)的最大值.單位:kbytes
  • -s size:設(shè)置堆棧的最大值.單位:kbytes
  • -t size:設(shè)置CPU使用時(shí)間的最大上限.單位:seconds
  • -v size:設(shè)置虛擬內(nèi)存的最大值.單位:kbytes
  • unlimited 是一個(gè)特殊值擦耀,用于表示不限制

注意:

  1. -n 限制文件描述符的最大值棉圈,在Linux下一切資源皆文件,所以該參數(shù)也限制了socket鏈接數(shù)
  2. 查詢時(shí)眷蜓,若不加H或S參數(shù)分瘾,默認(rèn)顯示的是軟限制
  3. 修改時(shí),若不加H或S參數(shù)吁系,兩個(gè)參數(shù)一起改變

設(shè)置ulimit的位置

可以在以下位置進(jìn)行ulimit設(shè)置:

  • /etc/profile 所有用戶有效德召,永久生效
  • ~/.bash_profile 當(dāng)前用戶有效,永久生效
  • 直接在控制臺(tái)輸入 當(dāng)前用戶有效汽纤,臨時(shí)生效
  • 放在程序的啟動(dòng)腳本中

limit.conf

什么是limits.conf

limits.conf文件實(shí)際是Linux PAM中 pam_limits.so 的配置文件上岗,pam_limits模塊對(duì) 用戶的會(huì)話 進(jìn)行 資源限制

一個(gè)shell的初始limits就是由pam_limits設(shè)定的蕴坪,用戶登錄后液茎,pam_limits會(huì)給用戶的shell設(shè)定在limits.conf定義的值。

pam_limits的設(shè)定值也是 per-process 的辞嗡。
pam_limits的設(shè)置是 永久生效 的。

limits.conf的位置

/etc/security/limits.conf

配置limits.conf

示例:

*    soft    nofile    655360
*    hard    nofile    655360
*    soft    noproc    655360
*    hard    noproc    655355
*    soft    core      0
*    hard    core      0

4個(gè)字段的含義分別為: domain type item value

  • domain: username|@groupname
  • type: soft滞造、hard续室、-
  • item:
    core - 限制內(nèi)核文件的大小
    date - 最大數(shù)據(jù)大小
    fsize - 最大文件大小
    memlock - 最大鎖定內(nèi)存地址空間
    nofile - 打開文件的最大數(shù)目
    rss - 最大持久設(shè)置大小
    stack - 最大棧大小
    cpu - 以分鐘為單位的最多 CPU 時(shí)間
    noproc - 進(jìn)程的最大數(shù)目
    as - 地址空間限制
    maxlogins - 此用戶允許登錄的最大數(shù)目
  • value: 值的大小

sysctl

什么是sysctl

sysctl是一個(gè)允許改變正在運(yùn)行中的Linux系統(tǒng)的接口,修改的是針對(duì) 整個(gè)系統(tǒng)內(nèi)核參數(shù)谒养。
sysctl的修改是 立即臨時(shí) 的(重啟后失效)挺狰。
可以通過修改sysctl.conf配置文件,達(dá)到 永久 生效买窟。

sysctl的選項(xiàng)

  • -n 打印值時(shí)不打印關(guān)鍵字
  • -e 忽略未知關(guān)鍵字錯(cuò)誤
  • -N 僅打印名稱
  • -w 當(dāng)改變sysctl設(shè)置時(shí)使用此項(xiàng)
  • -p 從配置文件“/etc/sysctl.conf”加載內(nèi)核參數(shù)設(shè)置
  • -a 打印當(dāng)前所有可用的內(nèi)核參數(shù)變量和值
  • -A 以表格方式打印當(dāng)前所有可用的內(nèi)核參數(shù)變量和值

查看某個(gè)內(nèi)核參數(shù)

sysctl fs.file-max

fs.file-max = 93796

臨時(shí)修改某個(gè)內(nèi)核參數(shù)

sysctl -w fs.file-max=100000  # 設(shè)置文件打開數(shù)
sysctl -w net.ipv4.ip_forward=1  # 開啟IP轉(zhuǎn)發(fā)

sysctl.conf配置文件

/etc/sysctl.conf

修改sysctl.conf并使其生效

修改/etc/sysctl.conf可以做到永久生效:

vi /etc/sysctl.conf

fs.file-max = 100000

最后使用-p命令從配置文件中加載內(nèi)核參數(shù)丰泊,使其立即生效:

sysctl -p

sysctl.conf配置示例

下面是一個(gè)摘抄的配置示例,出處:http://www.reibang.com/p/9a8e383b5b49

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

# Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536

# Controls the maximum size of a message, in bytes
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.netfilter.nf_conntrack_max = 1000000
kernel.unknown_nmi_panic = 0
kernel.sysrq = 0
fs.file-max = 1000000
vm.swappiness = 10
fs.inotify.max_user_watches = 10000000
net.core.wmem_max = 327679
net.core.rmem_max = 327679
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

/proc文件系統(tǒng)

什么是/proc文件系統(tǒng)

Linux內(nèi)核提供了一種通過/proc文件系統(tǒng)始绍,在運(yùn)行時(shí)訪問內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)瞳购、改變內(nèi)核設(shè)置的機(jī)制。
proc文件系統(tǒng)是一個(gè)偽文件系統(tǒng)亏推,它只存在內(nèi)存當(dāng)中学赛,而不占用外存空間。它以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口吞杭。
最初開發(fā)/proc文件系統(tǒng)是為了提供有關(guān)系統(tǒng)中進(jìn)程的信息盏浇。但是由于這個(gè)文件系統(tǒng)非常有用,因此內(nèi)核中的很多元素也開始使用它來報(bào)告信息芽狗,或啟用動(dòng)態(tài)運(yùn)行時(shí)配置绢掰。

對(duì)/proc中內(nèi)核文件的修改,針對(duì)的是 整個(gè)系統(tǒng)內(nèi)核參數(shù) ,修改后 立即生效 滴劲,但修改是 臨時(shí) 的(重啟后失效)攻晒。

/proc文件系統(tǒng)與sysctl.conf的對(duì)應(yīng)關(guān)系

/proc/sys下內(nèi)核文件與配置文件sysctl.conf中變量的對(duì)應(yīng)關(guān)系:

  1. 去掉前面部分/proc/sys
  2. 將文件名中的斜杠變?yōu)辄c(diǎn)

例如:

  • /proc/sys/net/ipv4/ip_forward -> net.ipv4.ip_forward
  • /proc/sys/kernel/hostname -> kernel.hostname

/proc文件系統(tǒng)中幾個(gè)常用的內(nèi)核文件

下面幾個(gè)是經(jīng)常會(huì)用到的文件:

  • /proc/meminfo 內(nèi)存信息
  • /proc/cpuinfo CPU信息
  • /proc/sys/fs/file-max 文件打開數(shù)
  • /proc/sys/fs/file-nr 整個(gè)系統(tǒng)目前使用的文件句柄數(shù)量

/proc文件系統(tǒng)中文件的權(quán)限

proc 中的每個(gè)文件都有一組分配給它的非常特殊的文件許可權(quán),并且每個(gè)文件屬于特定的用戶標(biāo)識(shí)哑芹。

  • 只讀:任何用戶都不能更改該文件炎辨;它用于表示系統(tǒng)信息
  • root 寫:如果 /proc 中的某個(gè)文件是可寫的,則通常只能由 root 用戶來寫
  • root 讀:有些文件對(duì)一般系統(tǒng)用戶是不可見的聪姿,而只對(duì) root 用戶是可見的

對(duì)/proc進(jìn)行讀寫

以開啟IP轉(zhuǎn)發(fā)為例:

cat /proc/sys/net/ipv4/ip_forward
0
echo "1" > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
1

當(dāng)然碴萧,也可以使用sysctl來配置這些內(nèi)核條目

內(nèi)核文件詳解

  • /proc/buddyinfo 每個(gè)內(nèi)存區(qū)中的每個(gè)order有多少塊可用,和內(nèi)存碎片問題有關(guān)
  • /proc/cmdline 啟動(dòng)時(shí)傳遞給kernel的參數(shù)信息
  • /proc/cpuinfo cpu的信息
  • /proc/crypto 內(nèi)核使用的所有已安裝的加密密碼及細(xì)節(jié)
  • /proc/devices 已經(jīng)加載的設(shè)備并分類
  • /proc/dma 已注冊(cè)使用的ISA DMA頻道列表
  • /proc/execdomains Linux內(nèi)核當(dāng)前支持的execution domains
  • /proc/fb 幀緩沖設(shè)備列表末购,包括數(shù)量和控制它的驅(qū)動(dòng)
  • /proc/filesystems 內(nèi)核當(dāng)前支持的文件系統(tǒng)類型
  • /proc/interrupts x86架構(gòu)中的每個(gè)IRQ中斷數(shù)
  • /proc/iomem 每個(gè)物理設(shè)備當(dāng)前在系統(tǒng)內(nèi)存中的映射
  • /proc/ioports 一個(gè)設(shè)備的輸入輸出所使用的注冊(cè)端口范圍
  • /proc/kcore 代表系統(tǒng)的物理內(nèi)存破喻,存儲(chǔ)為核心文件格式,里邊顯示的是字節(jié)數(shù)盟榴,等于RAM大小加上4kb
  • /proc/kmsg 記錄內(nèi)核生成的信息曹质,可以通過/sbin/klogd或/bin/dmesg來處理
  • /proc/loadavg 根據(jù)過去一段時(shí)間內(nèi)CPU和IO的狀態(tài)得出的負(fù)載狀態(tài),與uptime命令有關(guān)
  • /proc/locks 內(nèi)核鎖住的文件列表
  • /proc/mdstat 多硬盤擎场,RAID配置信息(md=multiple disks)
  • /proc/meminfo RAM使用的相關(guān)信息
  • /proc/misc 其他的主要設(shè)備(設(shè)備號(hào)為10)上注冊(cè)的驅(qū)動(dòng)
  • /proc/modules 所有加載到內(nèi)核的模塊列表
  • /proc/mounts 系統(tǒng)中使用的所有掛載
  • /proc/mtrr 系統(tǒng)使用的Memory Type Range Registers (MTRRs)
  • /proc/partitions 分區(qū)中的塊分配信息
  • /proc/pci 系統(tǒng)中的PCI設(shè)備列表
  • /proc/slabinfo 系統(tǒng)中所有活動(dòng)的 slab 緩存信息
  • /proc/stat 所有的CPU活動(dòng)信息
  • /proc/sysrq-trigger 使用echo命令來寫這個(gè)文件的時(shí)候羽德,遠(yuǎn)程root用戶可以執(zhí)行大多數(shù)的系統(tǒng)請(qǐng)求關(guān)鍵命令,就好- 像在本地終端執(zhí)行一樣迅办。要寫入這個(gè)文件宅静,需要把/proc/sys/kernel/sysrq不能設(shè)置為0。這個(gè)文件對(duì)root也是不可- 讀的
  • /proc/uptime 系統(tǒng)已經(jīng)運(yùn)行了多久
  • /proc/swaps 交換空間的使用情況
  • /proc/version Linux內(nèi)核版本和gcc版本
  • /proc/bus 系統(tǒng)總線(Bus)信息站欺,例如pci/usb等
  • /proc/driver 驅(qū)動(dòng)信息
  • /proc/fs 文件系統(tǒng)信息
  • /proc/ide ide設(shè)備信息
  • /proc/irq 中斷請(qǐng)求設(shè)備信息
  • /proc/net 網(wǎng)卡設(shè)備信息
  • /proc/scsi scsi設(shè)備信息
  • /proc/tty tty設(shè)備信息
  • /proc/net/dev 顯示網(wǎng)絡(luò)適配器及統(tǒng)計(jì)信息
  • /proc/vmstat 虛擬內(nèi)存統(tǒng)計(jì)信息
  • /proc/vmcore 內(nèi)核panic時(shí)的內(nèi)存映像
  • /proc/diskstats 取得磁盤信息
  • /proc/schedstat kernel調(diào)度器的統(tǒng)計(jì)信息
  • /proc/zoneinfo 顯示內(nèi)存空間的統(tǒng)計(jì)信息姨夹,對(duì)分析虛擬內(nèi)存行為很有用

以下是/proc目錄中進(jìn)程N(yùn)的信息:

  • /proc/N pid為N的進(jìn)程信息
  • /proc/N/cmdline 進(jìn)程啟動(dòng)命令
  • /proc/N/cwd 鏈接到進(jìn)程當(dāng)前工作目錄
  • /proc/N/environ 進(jìn)程環(huán)境變量列表
  • /proc/N/exe 鏈接到進(jìn)程的執(zhí)行命令文件
  • /proc/N/fd 包含進(jìn)程相關(guān)的所有的文件描述符
  • /proc/N/maps 與進(jìn)程相關(guān)的內(nèi)存映射信息
  • /proc/N/mem 指代進(jìn)程持有的內(nèi)存,不可讀
  • /proc/N/root 鏈接到進(jìn)程的根目錄
  • /proc/N/stat 進(jìn)程的狀態(tài)
  • /proc/N/statm 進(jìn)程使用的內(nèi)存的狀態(tài)
  • /proc/N/status 進(jìn)程狀態(tài)信息矾策,比stat/statm更具可讀性
  • /proc/self 鏈接到當(dāng)前正在運(yùn)行的進(jìn)程

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末磷账,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贾虽,更是在濱河造成了極大的恐慌逃糟,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蓬豁,死亡現(xiàn)場(chǎng)離奇詭異履磨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)庆尘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門剃诅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驶忌,你說我怎么就攤上這事矛辕⌒︴耍” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵聊品,是天一觀的道長(zhǎng)飞蹂。 經(jīng)常有香客問我茧跋,道長(zhǎng)樟结,這世上最難降的妖魔是什么照雁? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任斤讥,我火速辦了婚禮,結(jié)果婚禮上肛冶,老公的妹妹穿的比我還像新娘滤奈。我一直安慰自己哀蘑,他們只是感情好厘贼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布界酒。 她就那樣靜靜地躺著,像睡著了一般嘴秸。 火紅的嫁衣襯著肌膚如雪毁欣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天岳掐,我揣著相機(jī)與錄音凭疮,去河邊找鬼。 笑死串述,一個(gè)胖子當(dāng)著我的面吹牛哭尝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剖煌,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼逝淹!你這毒婦竟也來了耕姊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤栅葡,失蹤者是張志新(化名)和其女友劉穎茉兰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欣簇,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡规脸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了熊咽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莫鸭。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖横殴,靈堂內(nèi)的尸體忽然破棺而出被因,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布梨与,位于F島的核電站堕花,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏粥鞋。R本人自食惡果不足惜缘挽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呻粹。 院中可真熱鬧壕曼,春花似錦、人聲如沸尚猿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凿掂。三九已至伴榔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間庄萎,已是汗流浹背踪少。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糠涛,地道東北人援奢。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像忍捡,于是被迫代替她去往敵國(guó)和親集漾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容