linux 内存调优

来源:互联网 发布:koala for mac 编辑:程序博客网 时间:2024/06/05 08:40


欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 

内存调优 1 查看 

less /proc/PID/status 

less /proc/PID/statm pmap PID(进程号) 

memusage 命令 (yum install glibc-utils -y) 

ipcs (各种内存使用情况) 

sar -R 1 20 (-:消耗 +:回收)

sar -W 1 20 (swap) 

sar -B 1 20 (I/O) 

sar -r 1 20 (内存) 

vmstat -n 1 20 (内存) 

valgrind --tool=memcheck 命令 (查看命令内存状况)

2 限制内存 

vim /etc/security/limits.conf 

user1 hard as 1000 (用户user1所有累加起来,内存不超过1000kiB) 

user1 soft as 800 (用户user1一次运行,内存不超过800kiB) 

普通用户查询自己的限制

ulimit -a 

…(-v) 4500 

…(-u) 16384 

…(-t) unlimited 

调节soft限制 

ulimit -v 4000 

ulimit -u 16000 

ulimit -t 10000 

3  查询TLB 

x86info -c 

dmesg getconf -a 

4 提升TLB命中率 

(有大量连续数据) 使用大页hugepages 

查询大页的chunk size(默认为4MB) 

x86info

dmesg 

less /proc/meminfo 调整大页 

vim /etc/sysctl.conf 

vm.nr_hugepage=20(则TLB空间为20*4MB(chunk size)=80MB) 

(针对应用程序)文件系统大页 

mkdir /my-hugepages 

mount -t hugetlbfs none /my-hugepages 

(要写入/etc/fstab) 

5 跟踪程序使用系统调用及运行资源 

yum install strace –y

 strace -fc 命令

6 最小保留内存空间(如果常有大内存程序,建议调大) 

sysctl -a | grepvm.min_free 

(默认3831kiB) 

7 调节内存过量使用 

vm.overcommit_memory = 0(有申请时会尽量满足,但会检查内存是否足够) 

1(永远满足申请,不检查内存是否够用) 2 

vm.overcommit_radio = 50(先用swap与内存的%50) 

8 查看申请内存量 

cat /proc/meminfo | grepcommitted_AS 

9 cache 

查看slab cache (存放内核中的对象)

less /proc/slabinfo 

slaptop 

vmstat -m 

查看ARP cache 

ip neighbor list 

arp -a 

cat /proc/net/arp 

清空网卡arp :ipneighboor flush dev eth0 

调节arp大小:软限制 net.ipv4.neigh.default.gc_thresh2 = 512(条记录) 

硬限制 net.ipv4.neigh.default.gc_thresh3 = 1024(条记录)

 缓存记录net.ipv4.neigh.default.gc_thresh1 = 128(条记录) 

每隔多少秒清空一次 net.ipv4.neigh.default.gc_interval = 30 (秒)

查看page cache

less /proc/meminfo 

调节page cache(大量一样的请求 调大page cache)

 vm.lowmem_reserve_ratio = 256 256 32 (保留多少内存作为pagecache当前 最大 最小) 

vm.vfs_cache_pressure=100 (大于100,回收pagecache)vm.page.cluster=3(一次性从swap写入内存的量为2的3次方页) vm.zone_reclaim_mode=0 

1(当内存危机时,是否尽量回收内存 0:尽量回收 1:尽量不回收)

查看anon page(匿名页,用来存放一些其他数据,可用于swap)

less /proc/meminfo less /proc/PID/statm

10 查看内存空闲值

free -ltm 

使用=used-buffer-cached 

空闲=free+buffer+cached 

11 将内存,文件系统,磁盘信息进行同步 

ps aux | greppdflush (查看同步进程pdflush) 

vm.nr_pdflush_threads=2(此为pdflush进程数量,不写则默认会根据I/O自动调整) 

(当内存较小,调大pdflush数量可更快同步,但由于内存信息被清空,下次访问相同数据会变慢) 

12 脏页 

vm.dirty_background_radio=10 

(当脏页占内存10%,pdflush工作)

vm.dirty_radio=40 

(当进程自身脏页占内存40%,进程自己处理脏页,将其写入磁盘) 

vm.dirty_expire_centisecs=3000 

(脏页老化时间为30秒 3000/100=30秒) 

vm.dirty_writeback_centisecs=500 

(每隔5秒,pdflush监控一次内存数量 500/100=5秒) 

13 sync 

将所有缓存,脏页同步到磁盘,一般敲三次 

echo 3 > /proc/sys/vm/drop_caches 回收buffers (可用free -m 查看) 

14内存溢出自动杀死进程(SELINUX关) 

vm.panic_on_oom=0(计算机自动处理) 

1(自行配置处理)(子进程会继承父进程此值) 

/proc/PID/oom_adj (-19不可被杀死~15可被杀死) 

/proc/PID/oom_score (0~2588672)(2的n次方,与上值对应变化,只需改一处) 

(pidofvsftpd(查看进程号)) 15 swap优化 

swap尽量放在多个设备,这样多个I/O可同时运作 

vm.swappiness=60 (0优先使用cache~100优先使用swap) 

swap大小 内存 

swap 1~2G 1.5倍 2~8G 1倍 >8G 0.75倍 

vm.swap_token_timeout = 300 (秒) 

(多久往swap里写一次) 

swapon -s 查看 

swapoff -a 关闭

swapon -a 开启

 

0 0
原创粉丝点击