首页
斐讯设备
疯言疯语
系统运维
编程语言
网站建设
友情连接
推荐
autojs
Search
1
charles破解注册码(含windows和mac)最新安装教程「亲测有效」
62 阅读
2
mac下的好用工具小身材大本领-NeatDownloadManager-ndm下载器
50 阅读
3
【N1和Armbian】一、N1刷Linux系统armbian
41 阅读
4
docker更新现有容器为自动重启
37 阅读
5
aris常用命令收集
37 阅读
登录
Search
标签搜索
JAVA
JAVA学习系列
docker
Linux
js
N1
git
模块二
模块一
端口
模块五
数据库
模块九
模块四
镜像
模块三
模块六
MySQL
百度网盘
nginx
DaiMaFengZi
累计撰写
598
篇文章
累计收到
13
条评论
首页
栏目
斐讯设备
疯言疯语
系统运维
编程语言
网站建设
页面
友情连接
推荐
autojs
搜索到
10
篇与
的结果
2026-08-21
Redis 内存防崩溃优化方案
Redis 内存防崩溃优化方案目标:让 Redis 永远有硬上限,系统永远不进 Swap,事故提前告警而非事后重启。⚠️ 全文命令中的密码已替换为占位符 你的密码,执行时请换成真实密码;redis-cli 路径每台服务器不同,请先按【附一】查询替换。附一、先查询 redis-cli 路径(每台服务器不同,纯查询、不影响系统)下面都是只读查询命令,不会改动任何东西,放心执行:# 1. 看系统 PATH 里是否已能直接调用(最常用) which redis-cli # 2. 看正在运行的 redis-server 二进制在哪,redis-cli 通常在同目录的 bin 下 ps -ef | grep redis-server # 3. 常见安装目录直查(哪个有输出就用哪个) ls -l /usr/local/redis/bin/redis-cli 2>/dev/null ls -l /usr/bin/redis-cli 2>/dev/null ls -l /opt/redis/bin/redis-cli 2>/dev/null # 4. 全盘找(只读扫描,不影响系统;结果里取第一个存在的路径) find / -name redis-cli -type f 2>/dev/null | head查到后,把下文命令里的 /usr/local/redis/bin/redis-cli 整体换成你查到的实际路径即可。一、根因结论(一句话)Redis 没有有效的内存上限(或上限过大)→ 内存无限增长 → 物理内存耗尽 → Swap 打满(100%) → 页面置换风暴 → CPU 99% → 系统假死。典型崩溃时间线:Redis 吃满内存 → Swap 96% → Swap 100% → 触发事件,CPU 2%→42% → CPU 99% / 高负载 / 假死 → 人工重启。核心矛盾不是"Redis 用了多少",而是"它能不能无限用"。 只要给它一个硬上限并留足系统余量,同样的负载绝不会再把机器拖死。二、设计三原则#原则作用1给 Redis 设硬上限 maxmemory满则"驱逐旧数据",而非"撑爆系统内存"2系统永远留余量,绝不进 SwapSwap 一旦打满,Redis 延迟暴涨、CPU 被置换吞掉3合理监控水位,提前感知风险把事故消灭在苗头,而不是 100% 假死说明:原则 2 的"绝不进 Swap"是靠原则 1 把 Redis 框在合理上限内实现的(详见第三节),不需要去动系统内核参数。三、maxmemory 设置(最关键的一步)3.1 计算公式(务必满足)maxmemory ≤ (物理内存 × 0.85) − 其他进程常驻内存例:物理 31G,其他常驻进程(应用、数据库、Agent 等)合计约 6G。安全上限:31 × 0.85 − 6 ≈ 20G。即 Redis 最多给到 20G 也不会逼系统用 Swap。3.2 推荐值按"当前工作集 × 1.5"留余量防突增。若当前稳定 8G,则 maxmemory = 12G(12884901888 字节)。12G + 6G 其他 ≈ 18G,远小于 31G,系统永远有空闲 → 永不 Swap。3.3 设置命令(路径请先按【附一】查询替换)# 临时生效(立即止血) /usr/local/redis/bin/redis-cli -a '你的密码' CONFIG SET maxmemory 12884901888 # 验证 /usr/local/redis/bin/redis-cli -a '你的密码' CONFIG GET maxmemory3.4 ⚠️ 持久化(极易踩坑)若 redis 启动时没有带配置文件参数(如 redis-server 0.0.0.0:6379),它是用默认配置启动的,CONFIG REWRITE 可能新建文件但重启仍会丢配置。必须找到真正的启动入口并写进去(以下为只读查询,定位用):# 看是不是 systemd 托管 systemctl cat redis 2>/dev/null systemctl cat redis-server 2>/dev/null # 或看 init 脚本 / 启动脚本里有没有 redis-server ls -l /etc/init.d/ | grep -i redis grep -r "redis-server" /etc/rc.local /root/*.sh /home/*/*.sh 2>/dev/null找到后,在启动配置里显式加一行 maxmemory 12884901888(或指向一个含该项的 redis.conf),再重启验证 CONFIG GET maxmemory 是否持久生效。不要只依赖 CONFIG REWRITE。四、淘汰策略(maxmemory-policy)选择4.1 策略对比策略淘汰范围适用场景风险noeviction不淘汰,写报错不允许丢数据写阻塞,不可用allkeys-lru全部 key,按最近最少用纯缓存永久 key 也会被删allkeys-lfu全部 key,按最不常用纯缓存(更优)永久 key 也会被删volatile-lru/lfu仅有 TTL 的 key缓存+持久混放无 TTL 的 key 永不淘汰,可能涨爆volatile-ttl仅即将过期的 key同 volatile同上选型建议:纯缓存实例用 allkeys-lfu(比 LRU 更懂"常用",缓存命中更好);若缓存与不可重建的持久数据混放,应改用 volatile-lfu 并给缓存 key 补 TTL,或干脆把持久数据拆到独立实例。五、OOM 防护(可选兜底,保护关键进程)本节为"最后兜底",非必须;主防线仍是 maxmemory + 不进 Swap。以下只是调整 OOM 优先级(不改内核行为),风险低。万一再次发生内存争抢,确保关键业务进程(数据库 / 应用)不被 OOM killer 误杀,而让 Redis 优先被回收:# 降低关键进程的 OOM 被杀概率(数值越小越安全,-1000 几乎永不被杀) echo -500 > /proc/<关键进程_pid>/oom_score_adj # 提高 redis 被杀优先级(让它先被回收,而不是拖死整机) echo 500 > /proc/<redis_pid>/oom_score_adj # 换成实际 redis PID六、架构层面(长期根治,均为建议、非强制命令)缓存 / 持久数据分离:Redis 只放可重建的缓存;Session、锁、业务状态搬到其他存储或独立实例。服务器图形界面:生产服务器通常不需要图形界面,如确认无用,可禁用其自启动以省内存(不要盲目卸载,避免牵连依赖)。多实例隔离:若多种业务共用一台 Redis,按业务拆实例,单实例故障域更小、上限更好控。七、应急响应 Runbook(若再次假死)不要反复重启:重启会重新加载/重建数据,可能二次冲击。先确认 Swap 状态。快速查看(只读):free -h; swapon --show # 看 Swap 是否打满若 Redis 已无响应且内存失控:可 redis-cli SHUTDOWN NOSAVE(避免写坏 RDB),再按本方案设好 maxmemory 后拉起。拉起后第一时间 CONFIG GET maxmemory + INFO memory 验证上限已生效。八、落地检查清单[ ] 先按【附一】查到本机 redis-cli 真实路径,替换全文命令[ ] 确认缓存实例是否纯缓存(决定 allkeys-lfu 还是 volatile-lfu)[ ] CONFIG SET maxmemory 12884901888(12G,立即生效)[ ] 找到 redis 真实启动入口,把 maxmemory 写进配置/启动参数(持久化)[ ] 切换/确认 maxmemory-policy(纯缓存→allkeys-lfu)[ ] 配置 OOM 优先级,保护关键进程(可选)[ ] 验证:重启 redis 后 CONFIG GET maxmemory 仍为 12G附:命令安全提示命令行用 -a 明文密码会触发告警且密码进 history。建议改用环境变量(把 你的密码 换成真实密码):export REDISCLI_AUTH='你的密码' /usr/local/redis/bin/redis-cli CONFIG GET maxmemory附:检查脚本#!/bin/bash # redis_health_check.sh # 用途:巡检 Redis 内存水位 + 系统 Swap,超标即打印告警(可接邮件/钉钉) # 用法:crontab 每 5 分钟执行一次,输出追加入日志 # */5 * * * * /usr/local/redis/redis_health_check.sh >> /var/log/redis_health.log 2>&1 # ===== 配置区(按需修改)===== # 密码:执行前请换成真实密码(或改用 export REDISCLI_AUTH 方式,避免明文) PASS='你的密码' HOST=127.0.0.1 PORT=6379 # redis-cli 路径:每台服务器不一样,优先用 which 自动查找;找不到再手动改成实际路径 # 也可先手动查询: which redis-cli # ls -l /usr/local/redis/bin/redis-cli 2>/dev/null # ps -ef | grep redis-server # find / -name redis-cli -type f 2>/dev/null | head REDIS_CLI=$(command -v redis-cli 2>/dev/null) if [ -z "$REDIS_CLI" ]; then REDIS_CLI="/usr/local/redis/bin/redis-cli" # 自动找不到时,改成你查到的真实路径 fi TS=$(date '+%Y-%m-%d %H:%M:%S') echo "===== [$TS] Redis 健康巡检 =====" # ---- 1. Redis 内存使用率 ---- USED=$($REDIS_CLI -h $HOST -p $PORT -a "$PASS" INFO memory 2>/dev/null | awk -F: '/^used_memory:/{print $2}' | tr -d '\r') MAX=$($REDIS_CLI -h $HOST -p $PORT -a "$PASS" INFO memory 2>/dev/null | awk -F: '/^maxmemory:/{print $2}' | tr -d '\r') EVI=$($REDIS_CLI -h $HOST -p $PORT -a "$PASS" INFO stats 2>/dev/null | awk -F: '/^evicted_keys:/{print $2}' | tr -d '\r') if [ -n "$MAX" ] && [ "$MAX" -gt 0 ] 2>/dev/null; then RATIO=$(awk "BEGIN{printf \"%.2f\", $USED/$MAX*100}") echo "Redis 内存使用率: ${RATIO}% (used=$USED max=$MAX)" # 超过 85% 逼近 maxmemory,即将触发驱逐 if awk "BEGIN{exit !($RATIO>85)}"; then echo " [告警] 内存使用率大于85%,逼近 maxmemory,即将触发 key 驱逐!" fi else echo " [错误] maxmemory 未设置或为 0 —— Redis 可无限吃内存,存在崩溃风险!" fi echo "累计驱逐 key 数 (evicted_keys): ${EVI:-未知}" # ---- 2. 系统 Swap 使用率 ---- SWAP_TOTAL=$(free | awk '/Swap:/{print $2}') SWAP_USED=$(free | awk '/Swap:/{print $3}') if [ -n "$SWAP_TOTAL" ] && [ "$SWAP_TOTAL" -gt 0 ] 2>/dev/null; then SWAP_RATIO=$(awk "BEGIN{printf \"%.2f\", $SWAP_USED/$SWAP_TOTAL*100}") echo "系统 Swap 使用率: ${SWAP_RATIO}%" if awk "BEGIN{exit !($SWAP_RATIO>50)}"; then echo " [严重] Swap 使用率大于50%,系统已进入危险区,立即排查内存占用!" fi else echo "系统未启用 Swap(或未检测到)—— 无需关注 Swap 水位" fi echo ""
2026年08月21日
0 阅读
0 评论
0 点赞
2026-03-29
【N1安装飞牛优化二】限制现有的docker容器使用内存,调整 Swappiness 权重
限制现有的docker容器使用内存批量设置内存上限(复制并执行即可)# 1. 核心数据库(MySQL)限额 256M docker update --memory 256m --memory-swap 256m mysql # 2. 核心网络/Git 工具(mihomo, gogs)限额 128M ~ 256M docker update --memory 256m --memory-swap 256m mihomo docker update --memory 128m --memory-swap 128m gogs # 3. 基础服务组件(PHP, Redis, Nginx)限额 128M docker update --memory 128m --memory-swap 128m fn-php docker update --memory 128m --memory-swap 128m fn-redis docker update --memory 128m --memory-swap 128m fn-nginx # 4. 其他小工具(账本、面板)限额 128M 和 64M docker update --memory 128m --memory-swap 128m cashbook4 docker update --memory 64m --memory-swap 64m metacubexd为什么这样改?--memory 256m:限制该容器最多只能吃掉 256M 物理内存。--memory-swap 256m:限制该容器的“物理内存 + Swap(交换内存)”总共只有 256M。这意味着这个容器严禁过度占用系统资源。一旦这些容器内存超标,Docker 内部会自行清理,而绝不干扰您 OpenVPN 服务器的正常运行。调整 Swappiness 权重低 Swappiness 值,让系统尽量优先使用内存(和我们刚才设置的 ZRAM),减少对闪存的频繁读写。# 查看当前值 (默认通常是 60) cat /proc/sys/vm/swappiness # 临时修改为 10 sysctl vm.swappiness=10 # 永久修改 echo "vm.swappiness=10" >> /etc/sysctl.conf
2026年03月29日
1 阅读
0 评论
0 点赞
2025-11-26
在联网机器上下载所有 RPM 包并在离线机器上安装所有软件
在联网机器上下载所有 RPM 包并在离线机器上安装所有软件下载1. 安装下载工具sudo dnf install -y dnf-utils2. 创建目录mkdir ~/openEuler-20.03-LTS-SP4 && cd ~/openEuler-20.03-LTS-SP43. 启用必要仓库(关键!)欧拉openEuler系统sudo dnf config-manager --set-enabled everything EPOLCentos8.5系统sudo dnf config-manager --set-enabled base AppStream3. 下载dnf download --resolve \ nginx \ redis \ docker \ java-1.8.0-openjdk \ java-1.8.0-openjdk-devel4. 验证ls -l *.rpm | wc -l5. 打包tar -czvf openEuler-24.03-LTS-x86_64.tar.gz *.rpm安装:1. 解压 RPM 包cd /tmp tar -xzvf offline-apps.tar.gz dnf deplist java-1.8.0-openjdk2. 安装所有软件(自动解决依赖顺序)sudo dnf install -y *.rpm# (如果系统只有 yum,没有 dnf,可用:) # sudo yum localinstall -y *.rpm3. 启动并启用服务sudo systemctl enable --now nginx sudo systemctl enable --now redis sudo systemctl enable --now docker4. 验证安装结果nginx -v # 应显示版本 redis-cli --version # 应显示版本 docker --version # 应显示版本 java -version # 应显示 OpenJDK 17 curl http://localhost # 应看到 nginx 欢迎页
2025年11月26日
14 阅读
0 评论
0 点赞
2025-06-18
OpenEuler离线部署Redis、Nginx
前言OpenEuler虽然是基于Linux,和CentOS很像,但是其内部还是有很大差别,尤其是基础组件像gcc这,故直接拿CentOS中的组件去安装可能会出问题在开发环境,服务器可以连外网,很多组件可以直接yum安装,各种依赖包会自动安装好但在项目现场,如果服务器在内网无法访问Internet,就很棘手了,这时只能准备rpm包一个个去安装安装包下载地址OpenEuler镜像站罗列(推荐使用华为的官方镜像),基于OpenEuler 22.03 LTS SP3版本华为开源镜像站:https://mirrors.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP3/everything/x86_64/Packages/华中科技大学镜像站:https://mirrors.hust.edu.cn/openeuler/openEuler-22.03-LTS-SP3/everything/x86_64/Packages/中国科学技术大学镜像站:https://mirrors.ustc.edu.cn/openeuler/openEuler-22.03-LTS-SP3/everything/x86_64/Packages/官方:https://easysoftware.openeuler.openatom.cn/zh/rpm?name=nginx准备安装包下载这些基础包:redis安装执行命令rpm -ivh /opt/redis6-6.2.7-3.oe2203sp3.x86_64.rpmnginx安装执行命令rpm -ivh /opt/nginx-1.21.5-6.oe2203sp3.x86_64.rpm重要事项没把握的话,千万不要用下面这个命令,这个命令会忽略依赖和兼容性,可能会导致基础组件被卸载掉。rpm -Uvh *.rpm --nodeps --force
2025年06月18日
15 阅读
0 评论
0 点赞
2024-05-11
银河麒麟V10操作系统Kylin Linux Advanced Server release V10 (Lance)版本 docker run时报错permission denied
项目场景:在新装的麒麟v10操作系统上新部署docker并运行项目的相关docker容器报错出现报错,怎么也跑不起来问题描述在麒麟v10操作系统上执行docker run 命令想要部署一个redis容器报错了docker run -d --name redis -p 6379:6379 --memory-swappiness=0 redis:6.2.6 redis-server --requirepass "Um9uZ2h1aUAxMzU3OQ==" 1e99cb77c62007f1a52aa97b92f1e3703c02c7924580eab14d5c7cc19d528a41 报错内容docker: Error response from daemon: failed to create shim task: OCI runtime create failed: container_linux.go:318: starting container process caused "permission denied": unknown.原因分析:docker:来自守护程序的错误响应:无法创建填充码任务:OCI 运行时创建失败:container_linux.go:318:启动容器进程导致“权限被拒绝”:未知。大概意思守护进程被进程被占用了解决方案:卸载Kylin Linux Advanced Server release V10 (Lance) 自带的Podman, 执行 yum remove podman 后,重新run即可正常运行。
2024年05月11日
4 阅读
0 评论
0 点赞
2024-04-13
群晖 添加php-redis扩展
<?php phpinfo(); ?>在站点内新建个.php文件,然后浏览器查看,找到配置文件的位置vi /volume2/@appstore/PHP7.3/misc/php-fpm.ini在末尾添加[Redis] extension = redis.so修改完在套件中重启就可以了。synopkg restart PHP7.2模块文件存放位置: `text/volume2/@appstore/PHP7.2/usr/local/lib/php72/modules/
2024年04月13日
10 阅读
0 评论
0 点赞
2023-11-23
【深度学习KylinOS五】【麒麟系统环境安装之redis】麒麟系统使用Docker安装Redis以及初步使用
安装命令mkdir -p /home/redis/conf touch /home/redis/conf/redis.conf docker run -p 6379:6379 --name redis \ --network host \ -v /home/redis/data:/data \ -v /home/redis/conf/redis.conf:/etc/redis/redis.conf \ -itd redis redis-server /etc/redis/redis.conf \ --appendonly yes查看是否运行成功docker ps ##这个命令是查看所有正在运行的容器使用通过 redis-cli 连接测试使用 redis 服务docker exec -it redis-test /bin/bash redis-cli ping使用shutdown退出docker-cli再使用exit退出
2023年11月23日
3 阅读
0 评论
0 点赞
2023-10-21
【环境安装记录redis篇】使用YUM安装redis
在使用YUM安装之前要看一下YUM是否有问题准备安装环境由于 Redis 是基于 C 语言编写的,因此首先需要安装 Redis 所需要的依赖yum install -y gcc tcl gcc-c++ make使用yum进行处理问题yum install redis -y在安装完成之后会有/etc/redis.conf,我们需要进行一个备份操作cp /etc/redis.conf /home/redis_redhat/测试一下是否可以启动systemctl start redis接下来我们使用远程登录首先看一下监控的IP和端口号ss -tnlup | grep redis如果使用远程登录的话是登录不上的。我们需要修改/etc/redis.conf,添加一条bind 0.0.0.0
2023年10月21日
9 阅读
0 评论
0 点赞
1
2