• 與檔案系統及程序的限制關係: ulimit


    與檔案系統及程序的限制關係: ulimit

    想像一個狀況:我的 Linux 主機裡面同時登入了十個人,這十個人不知怎麼搞的, 同時開啟了 100 個檔案,每個檔案的大小約 10MBytes ,請問一下, 我的 Linux 主機的記憶體要有多大才夠? 10*100*10 = 10000 MBytes = 10GBytes ... 老天爺,這樣,系統不掛點才有鬼哩!為了要預防這個情況的發生,所以我們的 bash 是可以『限制使用者的某些系統資源』的,包括可以開啟的檔案數量, 可以使用的 CPU 時間,可以使用的記憶體總量等等。如何設定?用 ulimit 吧!

    [dmtsai@study ~]$ ulimit [-SHacdfltu] [配額]
    選項與參數:
    -H  :hard limit ,嚴格的設定,必定不能超過這個設定的數值;
    -S  :soft limit ,警告的設定,可以超過這個設定值,但是若超過則有警告訊息。
          在設定上,通常 soft 會比 hard 小,舉例來說,soft 可設定為 80 而 hard 
          設定為 100,那麼你可以使用到 90 (因為沒有超過 100),但介於 80~100 之間時,
          系統會有警告訊息通知你!
    -a  :後面不接任何選項與參數,可列出所有的限制額度;
    -c  :當某些程式發生錯誤時,系統可能會將該程式在記憶體中的資訊寫成檔案(除錯用),
          這種檔案就被稱為核心檔案(core file)。此為限制每個核心檔案的最大容量。
    -f  :此 shell 可以建立的最大檔案容量(一般可能設定為 2GB)單位為 Kbytes
    -d  :程序可使用的最大斷裂記憶體(segment)容量;
    -l  :可用於鎖定 (lock) 的記憶體量
    -t  :可使用的最大 CPU 時間 (單位為秒)
    -u  :單一使用者可以使用的最大程序(process)數量。
    
    範例一:列出你目前身份(假設為一般帳號)的所有限制資料數值
    [dmtsai@study ~]$ ulimit -a
    core file size          (blocks, -c) 0          <==只要是 0 就代表沒限制
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited  <==可建立的單一檔案的大小
    pending signals                 (-i) 4903
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024       <==同時可開啟的檔案數量
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 4096
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    
    範例二:限制使用者僅能建立 10MBytes 以下的容量的檔案
    [dmtsai@study ~]$ ulimit -f 10240
    [dmtsai@study ~]$ ulimit -a | grep 'file size'
    core file size          (blocks, -c) 0
    file size               (blocks, -f) 10240 <==最大量為10240Kbyes,相當10Mbytes
    
    [dmtsai@study ~]$ dd if=/dev/zero of=123 bs=1M count=20
    File size limit exceeded (core dumped) <==嘗試建立 20MB 的檔案,結果失敗了!
    
    [dmtsai@study ~]$ rm 123  <==趕快將這個檔案刪除囉!同時你得要登出再次的登入才能解開 10M 的限制
    

    單一 filesystem 能夠支援的單一檔案大小與 block 的大小有關。但是檔案系統的限制容量都允許的太大了!如果想要讓使用者建立的檔案不要太大時, 我們是可以考慮用 ulimit 來限制使用者可以建立的檔案大小喔!利用 ulimit -f 就可以來設定了!例如上面的範例二,要注意單位喔!單位是 Kbytes。 若改天你一直無法建立一個大容量的檔案,記得瞧一瞧 ulimit 的資訊喔!

    Tips鳥哥的圖示 想要復原 ulimit 的設定最簡單的方法就是登出再登入,否則就是得要重新以 ulimit 設定才行! 不過,要注意的是,一般身份使用者如果以 ulimit 設定了 -f 的檔案大小, 那麼他『只能繼續減小檔案容量,不能增加檔案容量喔!』。

  • 相关阅读:
    字符串的输入函数gets
    51nod 1113(矩阵快速幂简单题)
    矩阵快速幂基础
    hdu-2141(二分查找+暴力)
    opencv 摄像头 指定大小 数量 的图片
    Windows环境下使用tensorflow opencv的小事儿
    Vue+D3 V4 实现模块化
    Vue安装
    js 日历
    js基础
  • 原文地址:https://www.cnblogs.com/taosiyu/p/13084817.html
Copyright © 2020-2023  润新知