一、UMA(Uniform Memory AccessArchitecture)和NUMA(Non-Uniform Memory AccessArchitecture)
1. Linux内核必须处理X86体系结构中的两种硬件约束:
l ISA总线的直接内存存取(DMA)处理器有一个严格的限制:他们只能对RAM的前16MB寻址。
l 在具有较大容量RAM的现代32位计算机中,CPU不能直接访问所有的物理内存,因为线性地址空间太小。
2. 为了应对这两种限制,Linux2.6把每个内存节点的物理内存划分成3个管理区(zone)。x86的UMA体系结构中的管理区分为:
l ZONE_DMA:小于16MB的内存页框,内核直接映射
l ZONE_NORMAL:16MB~896MB的内存页框,内核直接映射
l ZONE_HIGHMEM:X86_32高于896MB的内存页框(X86_64的ZONE_HIGHMEM总是为0),内核不能直接映射
3. NUMA(只支持64位架构)
l 系统的物理内存被划分为几个节点(node)
l 在一个单独的节点内,任一给定CPU访问页面所需要的时间都是相同的,而对于不同的CPU,这个时间就不同。
l ZONE_HIGHMEM总是为0
二、 限制进程可占用的内存地址空间
1. 通过pam_limits.so模块可对用户进程的内存使用做限制
l [root@station9 ~]# vim /etc/security/limits.conf
#/etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
#
#Where:
#<domain> can be:
#domain可以使用户名和用户组,亦可用通配符
# - an user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#soft 指的是当前系统生效的设置值(KB)。hard 表明系统中所能设定的最大值(KB)。soft 的限制不能比hard 限制高。用 – 就表明同时设置了 soft 和 hard 的值。
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
#在内存中占用内存镜像文件大小(KB)
# - data - max data size (KB)
#最大数据大小(KB)
# - fsize - maximum filesize (KB)
#最大文件大小(KB)
# - memlock - max locked-in-memory address space (KB)
#最大内存地址空间锁大小(KB)
# - nofile - max number of open files
#最大打开文件数量
# - rss - max resident set size (KB)
#实际占用的最大地址空间,实际上不可限制,要限制应该限制as(KB)
# - stack - max stack size (KB)
# 最大栈大小(KB)
# - cpu - max CPU time (MIN)
#最大CPU占用时间,MIN分钟
# - nproc - max number of processes
#可运行进程的最大数
# - as - address space limit
#可占用的最大内存地址空间,KB
# - maxlogins - max number of logins for this user
#运行登录的最大数目
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to
#可调的最大nice值
# - rtprio - max realtime priority
#进程最大优先级
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
netsword hard as 1000
#限制用户netsword最大可用内存为1000KB。
# End of file
l [root@station9 ~]# vim /etc/pam.d/login
session required pam_limits.so
#默认该行是写在/etc/pam.d/system-auth文件中,login文件又含有
account include system-auth行
l [root@station9 ~]# su - netsword
-bash: error while loading shared libraries: libdl.so.2: failed to map segment from shared object: Cannot allocate memory
#以上说明内存空间不够,netsword用户无法登录。
2. 普通用户通过ulimit查看和修改针对自己的soft限制
l [netsword@station9 ~]$ ulimit -a|grep "file size"
core file size (blocks, -c) 0
file size (blocks, -f) unlimited
l [netsword@station9 ~]$ ulimit -f 10
l [netsword@station9 ~]$ ulimit -a|grep "file size"
core file size (blocks, -c) 0
file size (blocks, -f) 10
l [netsword@station9 ~]$ dd if=/dev/zero of=test bs=1M count=100
文件大小超出限制
#ulimit只是临时生效,要永久生效需写入到用户的环境变量中,~/.bashrc或~/.profile等