系统架构是通过分布式的方式进行部署的,登录的时候不会调用redis数据,假如用户登录成功了,会跳转到其它的项目上,并根据从redis中查到的权限缓存,像是相应的数据模块
问题一:用户登录失败,系统巨卡无比
问题二:Tomcat抛出 connect timed out错误
:sar -n DEV 1
这里发现了一个问题,服务器的内存资源居高不下,暂且不考虑服务器资源的正常与否
ps -ef 显示系统进程
这里不方便把服务器开启了那些进程罗列到此处,还请见谅;最后的分析结果就是,并无异常进程
这就奇怪了,到底是哪的问题呢?继续查找
生产环境有两个java项目都调用了这个服务器的redis服务,然后找到了这两个项目分别查看日志,几乎在相同时间都抛出了Time out的错误,因此断定应该是redis单方面的问题
查看了redis日志,并没有什么报错请求
使用redis-benchmark测试了redis的压力,也没有什么问题。
怀疑是有慢查询 连接数不够用 等待了 导致超时了
有这么几个命令:
./redis-cli -h 127.0.0.1 -p 6378 # 这个是连接上本机的6378的redis
auth password #如果redis设置的有密码,使用auth进行密码验证
CONFIG GET slowlog-log-slower-than #(10000us,Redis中的执行单位是微秒,相当于10ms)
SLOWLOG LEN #查看redis存储的慢查询记录,默认查看128条
SLOWLOG GET # 查看redis存储的慢查询记录,默认10条
从上面可以看出一个满查询在55毫秒左右,项目的配置文件在10秒左右,所以不存在超时的问题
怀疑redis的内存用到上线,因此查看了redis的配置
<code>maxmonery # 我的配置文件没有设置,默认是不限制内存</code>
介绍Memory的参数信息:

查看了redis使用内存很小,才使用了27.19M,排除了redis的内存使用情况
使用了speedtest-cli 命令测试了本机的网速情况
speedtest-cli命令介绍:
测试结果:
使用这个命令查看本机网络,貌似有问题,于是那了两台机器之间互传了一个较大的文件,查看了速度,经测试速度在5MB-6MB左右,因此排除了网络问题】
开始认为是持久化导致的磁盘IO飙升问题,于是更改持久化策略
先说一下持久化分为两种方式,第一种为AOF,第二种为save的方式,格式大概为
方式一:
方式二:
注掉了从的持久化,主注掉save模式,开启AOF模式,可是io高的问题依旧没有解决,于是乎就有了下文
看到这个界面,好像找到了点头绪,服务器的磁盘IO较高,但是小编这里也提出了疑问,redis的数据全部存放到了sdb银盘上,而且redis的程序也都是在sdb上面,那为什么服务器的sda的
IO资源占用如此之高呢?
顺藤摸瓜>>>就从高IO的线索查找问题根源:
iotop
<code>iotop执行命令结果,发现一个占用资源特别高的进程</code>
检查发现,这个进程存在的作用是,当系统的物理内存耗尽时候,系统会激活此进程,以来调用swap分区。
这下有点明白其中的道道了,问题原因大概如下:
检查都有那些系统应用占用了swap分区,编写脚本:
执行结果,发现
redis的进程全部存放在了swap分区中,果然是这样。
修改内核参数,合理分配内存使用
A.释放物理内存,并且叫新应用获取物理内存。
1.在释放内存之前,检查可用内存多少
free -m
输出结果略
2.手动释放内存
echo 1 > /proc/sys/vm/drop_caches
3.释放完成后,检查可用内存是否进行了释放
经过上述的三个命令,发现内存确实进行了释放。
4.重启redis服务
5.检查swap分区使用
重启了redis发现内存走的依旧是swap分区,物理内存还有很多可用内存,但是系统为什么分给应用swap分区呢?
B.修改系统内核参数,叫所有的应用尽量使用物理内存,避免使用swap分区。
仔细看,物理内存还有将近1GB没有使用。但是swap已经开始被使用。怀疑是不是swappiness文件的值没有更改。
说明:在centos里面,swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端,对于Centos的默认设置,这个值等于60,建议修改为10。具体这样做:
最后重新加载swap虚拟内存:
但是上面操作后,重启了redis应用,系统依旧分给了redis swap分区。
C. 最后重启服务器,并再次启动redis服务,最后问题得到了解决。swap分区为0了
本文转自 xinsir999 51CTO博客,原文链接:http://blog.51cto.com/xinsir/2050754,如需转载请自行联系原作者