20200305 從 ulimit 到 pam

今天在啓動一個Java程序時,報了打開文件過多的錯誤,遂ulimit -n發現是1024,但是同時sysctl -a | grep file-max看到是一個很大的數15000多,bing得StackOverFlower的回答:https://askubuntu.com/questions/162229/how-do-i-increase-the-open-files-limit-for-a-non-root-user,描述了ulimit命令修改的含義。
進行了如下操作:
1.通過修改在該會話下執行ulimit -n 4096,來修改文件打開數限制,ulimit -n顯示爲4096了,說明後面在該會話下啓動的進程文件打開數限制都是4096了,此時啓動程序成功。
2.按照上述鏈接高讚的回答修改/etc/security/limits.conf,兩行行首都加上*號,

* soft nofile 102400
* hard nofile 102400

然後修改/etc/pam.d/common-session*匹配的文件們,附加一行session required pam_limits.so。 再開新的登錄會話,ulimit -n時已經是102400了,說明對新的會話已經生效了;但是回到舊的窗口,ulimit -n仍然是4096
3.那麼此時crontab裏啓動的程序的打開文件數限制是多少呢?我想到,可再crontab裏簡單配置定時運行一個shell腳本,腳本里輸出ulimit -n到一個文件。我在舊的窗口裏進行此操作,此時觀察到輸出的是102400,說明crontab裏依賴的打開文件數限制和上面修改的/etc/pam.d/common-session-noninteractive相關。

上述鏈接中有回答的 這個命令值得一記su USER --shell /bin/bash --command "ulimit -n"
我估摸着是/etc/pam.d/cron中的這行

# Set up user limits from /etc/security/limits.conf.
session    required     pam_limits.so

PAM到底是個什麼東西?
根據我以前在syslog裏的觀察,pam是和用戶身份認證相關,因爲我發現crontab裏配置的任務命令如果帶了sudo,定時任務得到執行時麼authlog就會有記錄。
這篇中文文章大概講述了PAM的歷史,PAM模塊,配置(如required sufficient optinal的含義),如何編程使用PAM
https://www.ibm.com/developerworks/cn/linux/l-pam/index.html

https://dzone.com/articles/linux-pam-easy-guide
原來limit可以限制一個用戶的使用系統時的各種資源。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章