4 回答

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

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