4 回答

TA貢獻1856條經驗 獲得超11個贊
有限制,你首先需要分清,物理內存和虛擬內存的概念。然后你需要知道什么是“虛空間”。
物理內存到虛擬內存的轉換因不同 CPU 和操作系統的不同而不同,而且機制過于復雜,不說了。
首先,不是說你的機器有 1.5G 的物理內存就可以分配到內存。為什么呢?
因為操作系統對進程的內存管理首先是分配給進程一個“虛空間”,用戶根本看不見物理內存,它所有的內存都從“虛空間”種分配。
比如 Windows 在 X86 上分配給每個進程 4G 的虛空間,這個虛空間需要軟件和硬件共同實現,同樣,機制過于復雜,不說了。其中 Windows 系統占用 2G,分配給用戶 2G。另外 Windows 會把這個空間劃分成若干個區域,malloc 的內存就來自其中的 heap 區,加入系統給你的 heap 區域是 500M,那么你只能申請總共小于 500M 的虛擬內存,而不管你的物理內存大于 500M;同樣你即使只有 10M 的物理內存剩余了,一個新創建的進程照樣可以分配到 500M 的虛擬空間(只要你的硬盤足夠大,這個涉及到交換技術,過于復雜,不說了)。

TA貢獻1829條經驗 獲得超7個贊
進程最大打開文件描述符數:user limit中nofile的soft limit
a. 查看
$ ulimit -n
1700000
2. 設置
a. 臨時性:通過ulimit -Sn設置最大打開文件描述符數的soft limit,注意soft limit不能大于hard limit(ulimit -Hn可查看hard limit),另外ulimit -n默認查看的是soft limit,但是ulimit -n 1800000則是同時設置soft limit和hard limit。對于非root用戶只能設置比原來小的hard limit。
查看hard limit:
$ ulimit -Hn
1700000
設置soft limit,必須小于hard limit:
$ ulimit -Sn 1600000
2. 永久性:上面的方法只是臨時性的,注銷重新登錄就失效了,而且不能增大hard limit,只能在hard limit范圍內修改soft limit。若要使修改永久有效,則需要在/etc/security/limits.conf中進行設置(需要root權限),可添加如下兩行,表示用戶chanon最大打開文件描述符數的soft limit為1800000,hard limit為2000000。以下設置需要注銷之后重新登錄才能生效:
chanon soft nofile 1800000
chanon hard nofile 2000000
設置nofile的hard limit還有一點要注意的就是hard limit不能大于/proc/sys/fs/nr_open,假如hard limit大于nr_open,注銷后無法正常登錄??梢孕薷膎r_open的值:
# echo 2000000 > /proc/sys/fs/nr_open
- 4 回答
- 0 關注
- 1855 瀏覽
添加回答
舉報