为了账号安全,请及时绑定邮箱和手机立即绑定

请问该如何调高linux单进程使用的内存上限?

请问该如何调高linux单进程使用的内存上限?

呼如林 2019-08-17 11:10:55
如何调高linux单进程使用的内存上限
查看完整描述

4 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

有限制,你首先需要分清,物理内存和虚拟内存的概念。然后你需要知道什么是“虚空间”。

物理内存到虚拟内存的转换因不同 CPU 和操作系统的不同而不同,而且机制过于复杂,不说了。

首先,不是说你的机器有 1.5G 的物理内存就可以分配到内存。为什么呢?
因为操作系统对进程的内存管理首先是分配给进程一个“虚空间”,用户根本看不见物理内存,它所有的内存都从“虚空间”种分配。

比如 Windows 在 X86 上分配给每个进程 4G 的虚空间,这个虚空间需要软件和硬件共同实现,同样,机制过于复杂,不说了。其中 Windows 系统占用 2G,分配给用户 2G。另外 Windows 会把这个空间划分成若干个区域,malloc 的内存就来自其中的 heap 区,加入系统给你的 heap 区域是 500M,那么你只能申请总共小于 500M 的虚拟内存,而不管你的物理内存大于 500M;同样你即使只有 10M 的物理内存剩余了,一个新创建的进程照样可以分配到 500M 的虚拟空间(只要你的硬盘足够大,这个涉及到交换技术,过于复杂,不说了)。

查看完整回答
反对 回复 2019-08-18
?
吃鸡游戏

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,注销后无法正常登录。可以修改nr_open的值:
# echo 2000000 > /proc/sys/fs/nr_open




查看完整回答
反对 回复 2019-08-18
  • 4 回答
  • 0 关注
  • 1774 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信