1,cd redi-4.0.9 && make
2,make install PREFIX=/webdata/opt/local/redis #安装之前可以使用make test 做下测试
3,设置下环境变量
/etc/sysctl.conf 中增加
net.core.somaxconn = 1024
原理:
对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后, 我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了.每一个处于监听(Listen)状态的端口,都有自己的监听队列.监听队列的长度,与如下两方面有关:一个是 somaxconn参数;另一个是使用该端口的程序中listen()函数.故而somaxconn会限制了接收新 TCP 连接侦听队列的大小。对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。大多数环境这个值建议增加到 1024 或者更多。 服务进程会自己限制侦听队列的大小,常常在它们的配置文件中有设置队列大小的选项。大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助。
redis配置文件中有个参数,tcp-backlog默认值是511,而系统默认的somaxconn是128,所以redis启动以后报出这个warnning
vm.overcommit_memory=1
原理
内核参数overcommit_memory 确定了内存分配策略,可选值为[0、1、2]
0: 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1: 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存
进程通常调用malloc()函数来请求分配内存,Linux支持超量分配内存,以允许分配比可用RAM加上交换内存的请求。Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。
然后 sysctl -p
最后还要禁用透明大页
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >>/etc/rc.local
4,redis systemd脚本如下:
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/webdata/opt/local/redis/bin/redis-server /webdata/opt/local/redis/conf/redis.conf --daemonize no
ExecStop=/webdata/opt/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install]
WantedBy=multi-user.target
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!