先配置好参数
1 | git config --global user.email "css@110.com" |
Git Clone Depth=1
1 | # 浅克隆(--depth=1 仅拉取最新提交) |
配置参数中文描述
1 | git config --global user.email "xx@qq.com" |
未确认配置参数
1 |
|
1 | git config --global user.email "css@110.com" |
1 | # 浅克隆(--depth=1 仅拉取最新提交) |
1 | git config --global user.email "xx@qq.com" |
1 |
|
在 MongoDB 中,没有直接的 plain复制 rename database 命令
copydatabase()已过期
copydatabase()已过期
copydatabase()已过期
mongodump和plain复制mongorestore(适合大型数据库)1 | # 1. 导出旧数据库 |
mongosh的聚合管道(MongoDB 4.2+)1 | // 遍历所有集合并复制 |
| 项目 | 说明 |
|---|---|
| 索引 | 复制后需要重新创建索引 |
| 用户权限 | 数据库用户不会自动复制,需手动创建 |
| 磁盘空间 | 确保有足够空间存储两份数据 |
| 生产环境 | 建议在维护窗口操作,或先备份 |
1 | // 查看所有数据库 |
**推荐在生产环境使用 plain复制 mongodump/mongorestore**,更加稳定可靠,且可以验证数据完整性。
perfmon.msc(性能监视器)定位 Windows CPU 问题,核心是通过添加关键计数器实时监控 / 日志分析,先判断 CPU
瓶颈类型,再定位到进程 / 线程,最后结合 JDK 工具深挖 Java 问题,以下是精准可落地的完整流程
这是判断 CPU 瓶颈的核心步骤,优先添加以下计数器,覆盖整体、用户 / 内核、进程、线程与中断维度:
| 计数器路径 | 作用 | 正常阈值 | 异常判断 |
|---|---|---|---|
| \Processor(*)% Processor Time | 整体 CPU 使用率(* 含所有核心,_Total 为总和) | < 70% | 持续 > 80% 为瓶颈,>90% 严重 |
| \Processor(*)% User Time | 用户态 CPU(如 Java 应用) | < 50% | 持续 > 80% 多为应用代码问题 |
| \Processor(*)% Privileged Time | 内核态 CPU(如驱动、系统调用) | < 30% | 持续 > 50% 多为驱动 / 系统服务问题 |
| \Process(*)% Processor Time | 单个进程 CPU 占用(筛选 java.exe/javaw.exe) | — | 占比高的进程优先排查 |
| \Thread(*)% Processor Time | 单个线程 CPU 占用(需指定进程 PID) | — | 定位进程内高 CPU 线程 |
| \System\Processor Queue Length | CPU 等待队列长度 | 每核心 < 2 | 持续 > 2 且 CPU 高,说明调度拥堵 |
| \Processor(*)% Interrupt Time | 中断占用时间 | < 5% | 持续 > 10% 多为硬件 / 驱动问题 |
thread -n 5 指定进程PID查看
1 | "flow-execute290488" Id=930149 cpuUsage=46.42% deltaTime=93ms time=31828ms RUNNABLE |
tail -f /jenkins/apache-tomcat-10.1.50/logs/catalina.out -n500这个密码 看起来是明文,而其他配置都是加密格式({AQAAABAAAA…})!
根本问题:这个明文密码可能包含不可见字符,或者在保存时被错误解析,导致产生了 0x00 空字符。
1 | 05-Feb-2026 14:42:19.252 警告 [Handling POST /jenkins/manage/configSubmit from 192.168.0.75 : http-nio-8080-exec-1] hudson.model.Descriptor.save Failed to save /jenkins/jenkins_home/jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml |
1 | java.io.IOException: java.lang.RuntimeException: Failed to serialize jenkins.plugins.publish_over_ssh.descriptor.BapSshPublisherPluginDescriptor#hostConfigurations for class jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin$Descriptor |
Caused by: com.thoughtworks.xstream.io.StreamException: Invalid character 0x0 in XML stream
Invalid character 0x0 表示 SSH 配置的代理密码字段 (proxyPassword) 包含空字符(NULL character),这是 XML 不允许的字符!
这不是权限问题,而是 数据污染问题!
错误链:
Jenkins 尝试保存 Publish Over SSH 配置
序列化 BapSshHostConfiguration#proxyPassword 字段时失败
密码中包含 0x0(空字符),XML 写入器拒绝写入
导致整个配置文件无法保存
可能原因:
之前配置的代理密码包含特殊字符或空字符
配置文件损坏,密码字段被污染
从其他环境复制配置时编码问题
-Dorg.apache.catalina.security.SecurityListener.UMASK=0027
这就是问题根源!
1 | ps -ef | grep jenkins |
问题分析
UMASK=0027 是 Tomcat 的安全机制,它会:
覆盖 root 用户的默认 umask(通常是 0022)
强制新创建文件的权限为 640(即 -rw-r—–)
移除其他用户的写权限
虽然进程是 root,但 Jenkins 在写入配置文件时,Tomcat 的安全监听器会强制应用这个 umask,导致:
文件权限被限制为 640
Jenkins 无法再次写入(因为实际运行中 Jenkins 会检查并尝试重写)
1 | # 检查文件是否被其他进程占用 |
1 | sudo cat /jenkins/jenkins_home/jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml | grep -A5 "jenkins(prod-online)" |
1 | ls -lh *sh* |
1 | # 找到 Tomcat 的 setenv.sh(如果没有则创建) |
1 | # 2. 启动临时容器,不加载任何认证 |
1 | // 查看所有数据库 |
1 | # 3. 重新启动(相当于全新实例,但数据文件还在,需要修复) |
计算机配置 → 管理模板 → Windows组件 → 远程桌面服务 → 远程桌面会话主机 → 安全
3. Administrator账户是否被禁用
1 | Win+R → lusrmgr.msc → 用户 → Administrator → 取消勾选"账户已禁用" |
4. 远程桌面服务的安全层设置
1 | Win+R → gpedit.msc |
检查这两项:
5. 防火墙是否放行
1 | 控制面板 → Windows Defender 防火墙 → 允许应用通过防火墙 |
6. 最粗暴测试:先关掉NLA
1 | gpedit.msc → 计算机配置 → 管理模板 → Windows组件 → 远程桌面服务 → 远程桌面会话主机 → 安全 |
重启后再试。如果能连,说明是NLA凭据问题;如果连不上,是网络或防火墙问题。
想让“重启后远程直接能连”,就得让系统在开机后自动完成一次交互式登录,把会话跑起来。做法有两种:
注册表手动写 AutoAdminLogon(备用方案)
Win+R → regedit
定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
右侧新建/修改以下键值(都是 REG_SZ):
1 | AutoAdminLogon = 1 |
重启即可。
安全提醒
这是 Windows 11 的默认安全机制:
如果本地还没“真正”用密码登录过一次,系统里就没有缓存可供 NLA(网络级身份验证)使用的凭据,远程桌面就会直接拒绝连接,表现为“必须先在本机输完密码,远程才能连”。
为什么会这样
很多人第一次激活系统用的是 Microsoft 账号,但随后只设了 PIN 或 Windows Hello 刷脸/指纹。
PIN/Hello 只能解锁“已登录的本地会话”,不能当作 NLA 的凭据;而 Microsoft 账号的密码又从未在本地输入过,所以缓存里找不到有效凭据。
远程桌面服务启动时,NLA 阶段就要求出示“用户名+密码”,本地没有缓存只能失败,于是出现“必须本地先登录一次”的现象
解决思路(任选其一,推荐前两种)
本地用“账号密码”重新登录一次 a. 先锁屏 Win+L → 登录选项 → 选“密码”并输入 Microsoft 账号密码。 b.
成功后该凭据会被缓存,今后无需再本地登录即可远程 。
干脆新建一个本地管理员,专门做远程
1 | powershell |
然后在“设置 → 系统 → 远程桌面 → 远程桌面用户”里把 rdpuser 加进去。以后远程就用这个本地账户即可
关闭“仅允许 Windows Hello 登录” 设置 → 账户 → 登录选项 → 关闭“为提高安全性,仅允许 Windows Hello 登录 Microsoft
账号”。这样你就能在锁屏界面直接选“密码”,完成一次缓存 。
组策略放行“空密码”(仅家庭版不可用)
彻底关掉 NLA(降低安全性)
一句话总结
“先本地输一次密码”只是为了让 Windows 把真正的账号密码缓存下来;只要凭据存在,远程桌面就能在 NLA 阶段完成验证,之后再也不需要本地先登录。按上面
1 或 2 操作即可根治。
可以,直接把“Administrator”设为远程桌面用户即可,不需要再新建一个 rdpuser。
步骤如下(Win11 专业版/企业版):
先在本机用 Administrator 的「密码」登录一次
‑ 锁屏 → 登录选项 → 选「密码」并输入 Administrator 的密码,让系统把凭据缓存下来;这是解决“必须本地先登录”的关键。
把 Administrator 加入「远程桌面用户」组
Win+X → 终端(管理员) →
1 | net localgroup "Remote Desktop Users" administrator /add |
确认远程桌面已开启
设置 → 系统 → 远程桌面 → 打开「启用远程桌面」。
客户端连接时
用户名填 .\Administrator(或计算机名\Administrator),再输入密码即可直接远程,无需再本地先登录。
注意
如果系统用的是 Microsoft 在线账号,密码要输入「Microsoft 账号密码」而不是 PIN/Hello。
出于安全考虑,建议给 Administrator 设一个强密码,并在路由器或防火墙里限制可访问 3389 的 IP 范围
只要 任何域名 都报 Temporary failure in name resolution,就是 本机 DNS 解析链彻底断了,与具体域名无关。
Ubuntu 20.04+ 默认走 systemd-resolved,90 % 是它没跑 / 配置丢失 / 上游 DNS 无响应。
按下面「4 句命令 → 1 次验证」一次性修好即可:
1 | systemctl is-active systemd-resolved || sudo systemctl enable --now systemd-resolved |
1 | sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf |
确保文件第一行是
1 | nameserver 127.0.0.53 |
1 | sudo mkdir -p /etc/systemd/resolved.conf.d |
1 | systemd-resolve google.com && ping -c3 google.com |
能解析、能 ping 通就表示修复完成,再去跑你的证书脚本即可。
下载地址:Index of /releases/
大家可以自行选择redis的版本,笔者选择的是最新的

2.上传到服务器
前提是我先在服务器上创建了一个目录redis7.2.3,我直接上传到这个目录下
二、安装redis
1.解压redis
tar -zxvf redis-7.2.3.tar.gz
AI写代码
2.移动解压完成的目录到/usr/local/下
mv redis-7.2.3 /usr/local/
AI写代码
3.进入到redis-7.2.3的目录
cd /opt/data/iimes/soft/redis-8.4.0
AI写代码
4.编译安装
make install
等待安装
安装完成的目录结构如下:
三、修改配置文件 redis.conf
vim redis.conf
1.设置远程访问
注释掉 bind 127.0.0.1 -::1 这句话意思是 只在本地访问!你不注释掉,到时候你本地RDM 是链接不上的。或者改为 bind 0.0.0.0
2.修改 登陆redis的密码 如图:
作者为了图方便,改为了123456.
3.设置后台启动
将daemonize no 改为 daemonize yes
四、将redis添加到守护进程,并开启开机自启动
1.在/etc/systemd/system/ 目录下创建文件redis.service
/etc/systemd/system目录是Linux系统中用于存放systemd单元配置文件的位置。systemd是一个系统和服务管理器,负责启动、停止和管理系统进程
vim /etc/systemd/system/redis.service
AI写代码
2.添加如下内容
大家注意区分,对于下面/opt/data/iimes/soft/redis-8.4.0/src/redis-server中的 src 是根据redis的安装目录来的,有些是 bin
大家注意观察自己的redis的目录,根据实际情况填写。
1 | [Unit] |
保存并退出
3.设置开机自启
systemctl enable redis
AI写代码
4.添加环境变量
(1)可以直接在/etc/profile文件末尾直接添加
vim /etc/profile
export PATH=$PATH:/opt/data/iimes/soft/redis-8.4.0/src
AI写代码
(2)或在profile.d目录下新建一个,专门放redis的环境变量文件
进入/etc/profile.d/路径下新建redis.sh
vim /etc/profile.d/redis.sh
在redis.sh文件中新增以下内容
export PATH=$PATH:/usr/local/redis/src
5.刷新环境变量
source /etc/profile
AI写代码
6.重启redis
systemctl restart redis
AI写代码
说明:如果后续大家还重新修改了/etc/systemd/system/redis.service文件,启动redis时出现提醒:Warning: The unit file, source
configuration file or drop-ins of redis.service changed on disk. Run ‘systemctl daemon-reload’ to reload units
重新执行命令:systemctl daemon-reload
这个警告提示您的 redis.service 单元文件、源配置文件或附加配置文件在磁盘上发生了变化。为了加载这些变化,您需要运行 systemctl
daemon-reload 命令来重新加载单元。
五、验证
1.查看redis的运行状态
2.查看redis进程
3.使用命令连接客户端
redis-cli
进入之后,需要你输入密码才能获取到redis输出的信息(info)
auth 密码
或者 之前在连接的时候输入密码:
redis-cli -a
1 | network: |
/etc/systemd/network/10-enp1s0.network1 | [Match] |