1、查看相关连接数限制(防火墙):

cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max
cat /sys/module/nf_conntrack/parameters/hashsize

ss -s /-l(监听查看连接的backlog数量)
netstat -s | grep LISTEN 监测丢掉socket连接的数量,重启清空

//设置系统的backlog参数与半连接数量

cat /proc/sys/net/core/somaxconn
cat /proc/sys/net/ipv4/tcp_max_syn_backlog

2、防火墙停止:
servcie iptables stop
chkconfig iptables off
vi /etc/selinxu/config 和 vi /etc/sysconfig/selinux 两个文件,将其中的SELINUX=enforcing改为SELINUX=disabled

但上述只对系统修改起作用,若应用层开启的话,还是会打开防火墙的。
故将其防火墙模块加入黑名单列表,这样防火墙模块就会被禁止
lsmod | grep nf_conntrack
vi /etc/modprobe.d/blacklist.conf
blacklist nf_conntrack_ipv4
blacklist nf_defrag_ipv4
blacklist nf_conntrack_ipv6
blacklist nf_defrag_ipv6
blacklist nf_conntrack
blacklist ipv6
blacklist xt_state

3、监控socket连接数指令:
ss -ant | awk \'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}\'

4、查看进程占用端口号:
netstat -anp | grep PID
查看内存占用前几(10)名:
ps aux | sort -k4,4nr | head -n 10  

//查看进程的相关参数

ps -e -o \'pid,comm,args,pcpu,rsz,vsz,stime,user,uid\' | grep java |sort -nrk5

5、是否开启oom_kill机制
cat /proc/sys/vm/overcommit_memory 系统默认为0,
cat /proc/sys/vm/overcommit_ratio,系统默认50,此值为百分比

修改的话,可以在/etc/sysctl.conf中追加

vm.overcommit_memory=1

vm.overcommit_ratio=90

(1)内核参数 vm.overcommit_memory 接受三种取值:
0 – Heuristic overcommit handling. 这是缺省值,它允许overcommit,但过于明目张胆的overcommit会被拒绝,比如malloc一次性申请的内存大小就超过了系统总内存。Heuristic的意思是“试探式的”,内核利用某种算法猜测你的内存申请是否合理,它认为不合理就会拒绝overcommit。
1 – Always overcommit. 允许overcommit,对内存申请来者不拒。内核执行无内存过量使用处理。使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务的性能。
2 – Don’t overcommit. 禁止overcommit。 内存拒绝等于或者大于总可用 swap 大小以及 overcommit_ratio 指定的物理 RAM 比例的内存请求。如果您希望减小内存过度使用的风险,这个设置就是最好的。

(2)Heuristic overcommit算法在以下函数中实现,基本上可以这么理解:
单次申请的内存大小不能超过 【free memory + free swap + pagecache的大小 + SLAB中可回收的部分】,否则本次申请就会失败。
(3)关于禁止overcommit (vm.overcommit_memory=2) ,需要知道的是,怎样才算是overcommit呢?kernel设有一个阈值,申请的内存总数超过这个阈值就算overcommit,在/proc/meminfo中可以看到这个阈值的大小:
# grep -i commit /proc/meminfo
CommitLimit:     5967744 kB
Committed_AS:    5363236 kB
CommitLimit 就是overcommit的阈值,申请的内存总数超过CommitLimit的话就算是overcommit。
这个阈值是如何计算出来的呢?它既不是物理内存的大小,也不是free memory的大小,它是通过内核参数vm.overcommit_ratio或vm.overcommit_kbytes间接设置的,公式如下:
【CommitLimit = (Physical RAM * vm.overcommit_ratio / 100) + Swap】

注:
vm.overcommit_ratio 是内核参数,缺省值是50,表示物理内存的50%。如果你不想使用比率,也可以直接指定内存的字节数大小,通过另一个内核参数 vm.overcommit_kbytes 即可;
如果使用了huge pages,那么需要从物理内存中减去,公式变成:
CommitLimit = ([total RAM] – [total huge TLB RAM]) * vm.overcommit_ratio / 100 + swap
/proc/meminfo中的 Committed_AS 表示所有进程已经申请的内存总大小,(注意是已经申请的,不是已经分配的),如果 Committed_AS 超过 CommitLimit 就表示发生了 overcommit,超出越多表示 overcommit 越严重。Committed_AS 的含义换一种说法就是,如果要绝对保证不发生OOM (out of memory) 需要多少物理内存。

收藏 打印