1,问题描述:某天早上,听到业务系统反馈问题,如下代码
[2018-10-18 10:19:20,079] INFO O com.wiwj.cbs.common.shiro.ShiroSession[ion[86] - 调用setAttributes方法 方法redis.clients.jedis.exceptions.JedisConnectiectionException: Could not get a resource from the pool at at redis.clients.util.Pool.getResource(Pce(ce(Pool.java:42) a) at at com.wiwj.cbs.common.utils.JedisUtils.setex(Jed(ex(JedisUtils.java:335) a) at at com.wiwj.cbs.common.shiro.ReidsShiroSessionRepository.saveSession(Ron(on(ReidsShiroSessionRepository.java:28) a) at at com.wiwj.cbs.common.shiro.RedisCacheSessionDao.doUpdate(Red(te(RedisCacheSessionDao.java:64) a) at at org.apache.shiro.session.mgt.eis.CachingSessionDAO.update(Cac(te(CachingSessionDAO.java:277) a) at at org.apache.shiro.session.mgt.DefaultSessionManager.onChange(Def(ge(DefaultSessionManager.java:212) a) at at org.apache.shiro.session.mgt.AbstractNativeSessionManager.setAttribute(ute(te(AbstractNativeSessionManager.java:218) a) at at org.apache.shiro.session.mgt.DelegatingSession.setAttribute(ute(te(DelegatingSession.java:151) a) at at org.apache.shiro.session.ProxiedSession.setAttribute(ute(te(ProxiedSession.java:128) a) at at org.apache.shiro.web.util.WebUtils.saveRequest(Wst(st(WebUtils.java:609) a) at at org.apache.shiro.web.filter.AccessControlFilter.saveRequest(Ast(st(AccessControlFilter.java:208) a) at at org.apache.shiro.web.filter.AccessControlFilter.saveRequestAnstAndRedirectToLogin(in(AccessControlFilter.java:191) a) at at org.apache.shiro.web.filter.authc.UserFilter.onAccessDenieenied(ed(UserFilter.java:66) a) at at org.apache.shiro.web.filter.AccessControlFilter.onAccessDenieenied(ed(AccessControlFilter.java:133) a) at at org.apache.shiro.web.filter.AccessControlFilter.onPreHandle(Ale(le(AccessControlFilter.java:162) a) at at org.apache.shiro.web.filter.PathMatchingFilter.isFilterChainhainContinued(ed(PathMatchingFilter.java:203) a) at at org.apache.shiro.web.filter.PathMatchingFilter.preHandle(Pat(le(PathMatchingFilter.java:178) a) at at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternternal(al(AdviceFilter.java:131) a) at at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(Onc(er(OncePerRequestFilter.java:125) a) at at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(Pro(er(ProxiedFilterChain.java:66) a) at at org.apache.shiro.web.servlet.AbstractShirohiroFilte
2,处理过程
刚看到这个反馈问题时,感觉是数据库连接池不够了,但感觉这个是业务环境的错误,不应该出现这种情况,后续也发现其他系统也反馈页面不能使用的情况,就赶紧到redis所在机器查看情况,结果发现redis的进程根本不存在,命令ps -ef|grep redis
这时首要任务就是重启redis ,redis命令 /opt/redis-3.0.5/src/./redis-server /opt/redis-3.0.5/redis.conf
3,故障分析
重启之后就开始排查问题,业务环境就一台redis机器,而且只是单节点的,虽然只是主从,但没什么用
使用uptime命令发现机器被重启了。
然后找运维分析原因,运维人员查看了这一台虚拟机及虚拟平台的系统日志,最终发现虚拟平台上部署的HA软件在某一时刻自动重启了这一台虚拟机,而由于操作系统中并没有配置虚拟机重启之后应用自动重启的脚本,导致Redis应用没有启动。
4,后续措施
由于该环境只有一台redis,故从应用角度只能加入开机自启
vi /etc/rc.local 加入如下命令
/opt/redis-3.0.5/src/./redis-server /opt/redis-3.0.5/redis.conf
这是个软连接,没有执行权限,加入执行权限
chmod +x rc.local
备注:作为一名开发人员,要知其所以然,对于出现某些问题,一定要刨根问底,弄明白,这样你就比别人懂的更多,这也是你积累的经验。
相关推荐
首先,Redis开机启动脚本通常是Linux系统的init脚本或者systemd服务单元文件,它定义了如何启动、停止和检查Redis服务的状态。在不同的Linux发行版中,可能使用不同的方式来管理服务,例如在较旧的系统中可能使用`/...
### Linux下Redis 3.2.2安装与启动配置 #### 环境准备 - **操作系统**: CentOS 6.5 (2.6.32-431.el6.x86_64) - **软件**: Redis 3.2.2 #### 下载与解压 1. 使用`wget`命令下载Redis安装包: ```bash wget ...
也可以通过linux命令下载 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 将安装包复制到指定的位置 cp redis-4.0.8.tar.gz /usr/local/redis 解压 tar -zxvf redis-4.0.8.tar.gz 通过make...
为了实现Redis的服务化,你可以将启动Redis的命令写入系统服务,以便于开机启动和管理。例如,使用systemd创建一个名为redis.service的单元文件,然后通过`systemctl start redis`、`systemctl enable redis`来管理...
在Linux的CentOS 7.0和Debian 8.0系统中设置Redis开机启动,主要是通过创建自定义的初始化脚本,然后利用系统提供的服务管理工具(如`chkconfig`或`update-rc.d`)将Redis服务注册为开机启动。这个过程确保了每次...
* 设置开机启动:创建一个名为 `redis.service` 的服务文件,并添加以下内容,然后 reload systemd 服务并启动 Redis 服务。 四、Redis 命令 * 启动 Redis 服务:使用 `systemctl start redis` 命令启动 Redis ...
最后,为了实现Redis的开机启动,可以在系统服务管理工具中添加启动脚本。例如,在Systemd系统中,可以创建`/etc/systemd/system/redis.service`文件,输入以下内容: ```ini [Unit] Description=Redis In-Memory ...
7. **设置开机启动**: 若要让Redis在系统启动时自动运行,执行: ```bash systemctl enable redis ``` 8. **验证安装**: 可以通过以下命令检查Redis是否正常运行: ```bash redis-cli ping ``` 如果...
然后,你可以使用`chkconfig`(CentOS/RHEL)或`systemd`(Ubuntu/Debian)将Redis设置为开机启动。 ```bash # 在/etc/init.d/redis 文件中添加启动、停止等函数 # ... # 添加执行权限 sudo chmod +x /etc/...
设置开机启动Redis服务,创建软链接到`/etc/init.d`: ```bash sudo ln -s /usr/local/bin/redis-server /etc/init.d/redis ``` 然后,启动、停止和重启Redis服务可以通过以下命令完成: ```bash sudo service ...
1、下载安装 wget http://redis.googlecode.com/files/redis-2.2.13.tar.gz ...第一次启动Redis前,建议为Redis单独建立一个用户,并新建data和日志文件夹 sudo useradd redis sudo mkdir -p /var/lib/re
### Redis 3.2.0 在 Linux 下的安装与配置 #### 一、环境准备与安装 ...至此,Redis 3.2.0 已经成功安装并在 Linux 系统上作为服务运行,并且已经配置为开机自启动。通过以上步骤,还可以实现 Redis 的远程访问功能。
保存并退出编辑器后,我们需要告诉`systemd`这个新的服务文件,并启用它作为开机启动服务: ```bash sudo systemctl enable redis ``` 接下来,你可以使用以下命令来管理Redis服务: - 启动Redis服务: ```bash ...
然后使用`systemctl enable redis`使其开机启动,`systemctl start redis`启动服务。 9. **安全注意事项**: 默认情况下,Redis是不安全的,因为它允许任何远程连接。在生产环境中,你应该限制网络访问,比如通过...
4. **启动Redis服务**:使用`redis-server /etc/redis/redis.conf`启动Redis服务器,或者将Redis配置为开机启动服务。 5. **客户端连接**:使用`redis-cli`命令行工具连接到Redis服务器,可以进行数据的增删查改...
5. 设置Redis服务开机启动: ``` sudo systemctl enable redis ``` 接下来,我们将讨论如何搭建Redis集群。Redis集群需要至少三个节点,每个节点都包含一部分数据,并通过Gossip协议进行通信和数据同步。 1. ...
本资源可结合我的文章《详解CentOS7下编译安装Redis5.x设置开机启动及修改端口(含redis需编译安装包和redis免编译安装包)》配合使用,同时也可单独去使用。包含redis3.0.7免编译版安装包,redis5.0.7离线安装包,...
除了持久化,让Redis开机自启动也是运维中的重要步骤。在Linux系统中,可以将Redis服务添加到系统启动服务列表。这通常通过`systemd`服务管理器完成,编写一个名为`redis.service`的单元文件,放置在`/etc/systemd/...
5. 设置为开机启动:`sudo systemctl enable redis` **在CentOS/RHEL系统上安装Redis**: 1. 添加Redis仓库:`sudo tee /etc/yum.repos.d/redis.repo ,然后添加仓库配置。 2. 安装Redis:`sudo yum install redis`...
在CentOS系统中,配置Redis开机自启动主要涉及两部分:一是对Redis配置文件`redis.conf`的修改;二是创建并配置系统服务脚本`/etc/init.d/redis`。 ### 一、修改 Redis 配置文件 `redis.conf` 1. **设置为后台运行...