记录一次服务器项目启动超慢,频繁宕机的问题。
物理内存不足可能引发的问题
- mysql查询超时, 连接超时,导致服务无法使用
Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60999, active 1, maxActive 200, creating 1, runningSqlCount 1 : SELECT.....
- redis连接失败
org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
- 项目启动慢
- ssh连接不上
- springboot: 无法执行事务回滚
org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope
解决方案
增加虚拟内存(swap分区),解决物理内存不够用问题.
命令:
free -h
: 查询内存使用情况
dd if=/dev/zero of=/var/swap bs=1024 count=8162000
: 划分虚拟内存分区(大小4G),执行命令过程中无响应,需等待mkswap /var/swap
: 将分区设置为swap分区swapon /var/swap
: 开启swap分区cat /proc/sys/vm/swappiness
:查询swap使用最大限度.
swappiness=0
: 表示最大限度使用物理内存,然后才是 swap空间;
100
:
swappiness=100
: 表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面sysctl vm.swappiness=10
: [临时调整,重启后回到默认设置]将swap是想最大限度调整到10%, 内存使用到90%的时候,开始出现有Swap分区的使用.(大家知道,内存的速度会比磁盘快很多,这样子会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整)echo 'vm.swappiness=10' >>/etc/sysctl.conf
: 永久调整swap使用最大限度.`sysctl -p
: 激活步骤7的设置