Tomcat闪退原因排查:环境变量、端口占用与JVM内存配置详解
双击Tomcat的startup.bat屏幕上冒出一个黑窗口还没等看清里面的字窗口就“嗖”地一下消失了紧接着浏览器里localhost:8080死活打不开。这个场景我在做Java Web开发和部署时遇到过太多次而且最让人头疼的是Tomcat闪退的原因翻来覆去就那么几类但每次换台机器、换个部署环境还是会有人栽在同一个坑里。所以这篇就专门把Tomcat闪退最常见的原因一次性捋清楚重点覆盖三大类Java环境变量配置错误、8080端口被占用、JVM内存分配失败。内容以Windows为主也会同步给Linux下的排查命令适合刚入门Java Web开发、正在本地部署Tomcat或者部署到服务器后一启动就自动退出的同学参考。先说明一点本文说的“闪退”是启动脚本在拉起JVM或者初始化容器的过程中遇到致命问题直接退出控制台窗口瞬间关闭的现象。它和Tomcat启动成功之后运行到一半崩溃是两条不同的排查路线别混为一谈。1. 闪退问题的整体判断思路1.1 先理解闪退是怎么发生的Tomcat本身就是一个Java程序startup.bat只是一个壳这个脚本的真正工作有三步第一找到合适的JAVA_HOME和JRE环境第二根据CATALINA_OPTS等参数拼出JVM启动参数第三调用org.apache.catalina.startup.Bootstrap把容器拉起来。这三个环节任何一步出现问题Bootstrap线程会抛出致命异常JVM进程直接退出Windows下那几毫秒的输出还没来得及显示窗口就被系统回收了。换句话说闪退不是Tomcat“不愿启动”而是它在启动的极早期就撞上了不可恢复的错误。理解这一点很重要因为很多新手会陷入一个误区反复去改server.xml、改web.xml甚至怀疑是业务代码的问题。其实从概率上讲闪退绝大部分是环境层面的问题而不是应用代码的问题。1.2 排查永远从日志开始而不是靠猜遇到闪退之后我见过不少人直接在搜索引擎里搜“tomcat 闪退”然后照着别人的命令一通乱敲。这种做法效率很低。正确路径是先想办法拿到错误信息再根据错误信息定位。日志在哪在Tomcat安装目录的logs文件夹下。Linux和Windows通用。Windows下通常产生的是catalina.日期.logLinux下是catalina.out。有一种特殊情况要注意如果错误发生在Tomcat日志组件初始化之前比如环境变量配置错误、JVM根本起不来logs目录下可能没有当天的新日志甚至整个logs目录是空的。这时候就不能干等日志了必须手动跑到前台启动强制把错误输出暴露出来。具体做法下面会细说。我习惯的排查顺序可以整理成一张表实际处理闪退问题时几乎不用动脑顺着往下走就行排查顺序检查项快速方法1拿到错误输出cmd窗口手动执行startup.bat或使用catalina.bat run2Java环境变量echo %JAVA_HOME%验证java -version3端口占用netstat -ano | findstr 80804JVM内存参数查看catalina.bat或setenv.sh中的-Xms/-Xmx5JDK位数和版本java -version检查32位/64位2. 原因一Java环境变量配置错误2.1 为什么环境变量会导致闪退Tomcat启动过程中会依赖JAVA_HOME这个环境变量来定位java.exe。可以打开bin目录下的catalina.bat看一眼里面有一段很关键的判断逻辑大意是如果JAVA_HOME没设置或者JAVA_HOME路径下找不到bin/java.exe就会输出一行错误信息然后退出。问题在于startup.bat包装了这层逻辑错误信息打印出来之后窗口立刻关闭所以很多人根本没机会看到那句经典提示。这就是闪退的第一大原因也是最常见、最让新手困惑的一个。它的本质是Tomcat找不到可以用的Java运行时自然不可能继续启动。2.2 快速自检环境变量按下WinR输入cmd在命令行窗口里依次执行下面三条命令echo %JAVA_HOME% where java java -version正常情况下第一条会输出你配置的JDK安装路径第二条会列出系统能找到的java.exe位置第三条会输出JDK版本号。如果第一条输出的是空的说明JAVA_HOME没有配置如果java -version能跑通但echo %JAVA_HOME%是空的说明Java命令是靠PATH里的配置生效的而Tomcat的启动脚本更依赖JAVA_HOME这个变量也会出问题。还有个隐蔽情况where java查出来的路径和你以为的JAVA_HOME根本不是同一个JDK。我在一台机器上碰到过系统PATH里残留了旧版本的JDK路径where java指向了老的1.7版本而JAVA_HOME配的是1.8Tomcat启动时虽然能跑但日志里报了一些奇怪的类加载错误这种不一致很容易让人误判。所以在检查时把三条命令的输出放在一起对照不要只看其中一条。2.3 正确配置JAVA_HOMEWindows下打开“系统属性”→“高级”→“环境变量”在系统变量里新增或修改JAVA_HOME路径直接填JDK的安装根目录注意不是bin目录也不要在路径末尾加分号或空格。JAVA_HOMED:\soft\jdk1.8.0_202然后在系统变量PATH里追加一条%JAVA_HOME%\bin配置完成后必须重新打开一个cmd窗口才能生效已经在运行的cmd不会自动拿到新变量。这个细节踩坑率极高经常有人改完环境变量后没重启命令行直接在旧窗口里继续跑startup.bat结果还是闪退然后跑来问为什么配置没用。Linux环境下排查逻辑是一样的只不过变量名和命令有些差别可以在当前shell里临时验证echo $JAVA_HOME which java java -version在/etc/profile或~/.bashrc里配置JAVA_HOME时同样只需要写到JDK根目录再通过export PATH$JAVA_HOME/bin:$PATH把命令暴露出去。2.4 这个坑里最容易忽略的细节JAVA_HOME路径里如果有空格比如C:\Program Files\Java\jdk1.8.0_202catalina.bat对路径是用双引号包裹的一般能处理但如果你自己写脚本或改过配置就要格外小心空格导致的路径截断。不要为了图省事把JAVA_HOME直接配置成jre目录。Tomcat跑起来需要的是JDK虽然JRE有时也能撑一部分场景但JSP编译、部分管理功能会依赖JDK里的工具类只配JRE很容易在后续运行中踩到别的坑。机器上装了多个JDK版本时JAVA_HOME和PATH指向不一致的问题很难排查建议把系统环境变量里的旧JDK路径清理干净只保留你希望使用的那一套。3. 原因二8080端口被占用3.1 端口冲突为什么会让Tomcat直接退出Tomcat默认的HTTP连接器监听8080端口。启动过程中Bootstrap会尝试创建ServerSocket并绑定这个端口。如果端口已经被其他进程占用就会抛出java.net.BindException: Address already in use: JVM_Bind。这个异常属于启动阶段的致命错误Tomcat会直接放弃启动控制台窗口关闭看起来又是闪退。这类问题的场景非常集中多半是你本机同时跑着另一个Web服务比如另一个Tomcat实例、某个开发工具的嵌入式服务器、或者别的软件恰好占用了8080端口。也有不少情况是上一次Tomcat没被正常关闭进程还残留在后台把端口咬着不放。3.2 三步定位端口占用Windows下打开cmd执行netstat -ano | findstr :8080输出的最后一列是PID也就是占用8080端口的进程ID。拿到PID之后用下面这条命令看是哪个进程tasklist | findstr 12345把12345替换成你查到的实际PID。如果确认这个进程确实不需要保留再结束它taskkill /F /PID 12345Linux下对应命令是lsof -i:8080 # 或者 ss -tlnp | grep 8080查到PID后用kill -9结束进程。需要注意的是lsof输出会显示进程名结束之前最好确认一下是什么程序有些服务器的8080端口可能是另一个业务系统在正常对外服务不能盲目杀掉。3.3 不想杀进程就直接给Tomcat换端口如果8080被占用是常态或者你不想动其他服务直接修改Tomcat的端口更稳妥。打开conf目录下的server.xml找到下面这段配置Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 /把port改成8081或者你想要的空闲端口保存后重新启动。注意改了端口之后访问地址也要跟着变比如http://localhost:8081别改完端口还在浏览器里访问8080那当然还是打不开。3.4 别忘了8005和8009这两个端口很多人在排查端口冲突时只盯着8080忽略了Tomcat默认还会占用另外两个端口8005是Shutdown端口用于接收关闭命令8009是AJP连接器的端口。如果8005或8009被其他进程占用了Tomcat同样会在启动时报Address already in use然后闪退。所以排查端口占用时建议一次性把三个端口都查一遍netstat -ano | findstr :8080 :8005 :8009如果8005冲突可以在server.xml里修改下面这行的portServer port8005 shutdownSHUTDOWN把8005改掉即可。值得注意的是Shutdown端口在对外暴露的生产环境里本身就有安全风险有些运维会直接把端口改成随机值或者关闭对外访问这也算是一个顺手的加固操作。4. 原因三JVM内存参数配置不当4.1 内存不足导致JVM初始化失败Tomcat启动时会按照catalina.bat或setenv.sh里的JAVA_OPTS参数来申请JVM堆内存。如果申请的内存超过物理机实际可用内存或者超出当前JDK位数能寻址的上限JVM会在初始化阶段直接失败。这种失败同样发生在启动早期窗口会闪退日志里通常能看到类似这样的信息Error occurred during initialization of VM Could not reserve enough space for object heap或者Insufficient memory还有一个常见场景在2G内存的服务器上部署Java应用不知道谁把-Xmx调到了2048m服务器本身就同时跑着操作系统和其他进程物理内存根本不够JVM一起动就申请失败。这个问题在云服务器、低配虚拟机上特别常见。4.2 怎么看日志确认是内存问题打开logs目录下最新日期的catalina日志如果看到刚才提到的那几句错误基本可以锁定是内存分配问题。还有一种情况错误是Java HotSpot(TM) 64-Bit Server VM warning: MaxNewSize (XXX) is greater than or equal to the entire heap size (XXX)这属于参数配置不合理也会导致启动异常或运行不稳定。看到这类输出直接去检查启动脚本里的-Xms、-Xmx、-XX:MaxNewSize配置。4.3 调整JVM内存参数的正确姿势Windows下Tomcat启动时读取的是bin目录下catalina.bat。在这个文件里搜索JAVA_OPTS可以直接改这一行比如set JAVA_OPTS-server -Xms512m -Xmx1024m -XX:MetaspaceSize256m -XX:MaxMetaspaceSize512m如果是Linux环境更推荐的做法是在Tomcat的bin目录下新建一个setenv.sh文件如果不存在把参数写进去。Tomcat启动脚本会自动读取setenv.sh所以不需要修改catalina.sh本体以后升级Tomcat版本时也不用担心覆盖掉自定义配置export JAVA_OPTS-server -Xms512m -Xmx1024m -XX:MetaspaceSize256m -XX:MaxMetaspaceSize512m参数选择上我的习惯是让-Xms和-Xmx保持一致这样可以避免JVM在运行期频繁扩容缩容堆内存减少性能抖动。至于堆大小给多少要先看机器物理内存。一个可参考的粗略估算给操作系统和其余进程留至少一半内存剩下的再分配给JVM。比如2G内存的机器堆上限给1024m左右比较稳4G内存的机器常见配置是-Xms1024m -Xmx2048m。4.4 32位JDK的隐藏限制这是很多人会踩但不一定意识到的坑32位JDK在Windows上能申请的堆内存上限大约在1.5G左右不同系统可能略有浮动。如果你用的是32位JDK却把-Xmx调到了2048mJVM启动时会直接报“Could not reserve enough space for object heap”闪退就是这么来的。解决办法有两条路一是把堆大小调到1.5G以内二是换成64位JDK。怎么确认自己是哪个版本执行java -version如果输出里带“64-Bit”字样就是64位否则是32位。我强烈建议现在的部署环境统一使用64位JDK没必要在容量上省这个事。4.5 多实例部署时的内存叠加问题还有一种比较隐蔽的情况一台机器上部署了多个Tomcat实例每个实例单独看内存参数都没问题比如两个实例各-Xmx1024m但机器物理内存只有2G两个实例同时启动时第二个就会因为内存不足闪退。这在测试环境里很常见因为大家总是默认“内存不够就加参数”却没算过总量。遇到多实例场景建议先把每个实例的堆大小降下来再考虑物理机是否需要扩容。同时也要注意系统里还有没有其他常驻进程占内存不能把物理内存全部算给JVM。5. 常见问题与排查技巧实录5.1 一条快速排查路线图把前面的内容浓缩成一张速查表遇到闪退问题时照着走大多数情况能在五分钟内定位阶段现象检查命令或位置常见解法启动即闪黑窗口秒关cmd下运行startup.bat或catalina.bat run拿到具体错误信息环境变量问题错误里包含JAVA_HOMEecho %JAVA_HOME%修正JAVA_HOME重开终端端口问题错误里包含BindExceptionnetstat -ano | findstr 8080杀进程或修改端口内存问题错误里包含object heap查看JAVA_OPTS调低-Xmx或换64位JDKJDK位数问题64位JDK日志异常java -version统一使用64位JDK5.2 看不到错误信息窗口一闪就没怎么办这是最让人抓狂的情况。破解方法很简单在cmd窗口里手动执行startup.bat而不是双击。命令行窗口不会自动关闭你可以看到完整的输出。如果这样还是关得太快还有两个更稳妥的办法。第一个用catalina.bat run代替startup.bat启动。run模式会把Java进程放到前台运行所有日志和异常直接打印在当前窗口这是调试启动问题的首选方式问题排查完之后再切回正常的startup.bat去后台运行。第二个给startup.bat临时加上暂停逻辑。打开bin目录下的startup.bat在文件末尾追加一行pause启动失败后窗口会停在“请按任意键继续”的状态这样就能截图错误信息了。排查完记得把pause删掉不然以后每次启动都要手动按一下。5.3 环境变量明明配了为什么还是闪退我遇到过好几例这种问题最后发现原因是用户变量和系统变量同时存在两套JAVA_HOME。Windows下环境变量分为系统变量和用户变量系统变量对所有用户生效用户变量只对当前用户生效而且用户变量会覆盖系统变量里的同名变量。如果之前在某处配过JAVA_HOME又在另一处配了新的实际生效的是优先级更高的那一个。检查时不要只看一个地方用cmd执行echo %JAVA_HOME%把实际生效的值和Tomcat所在环境的预期值对照。另外刚才也提过PATH里如果存在多个版本的Java路径where java可能指向意料之外的JDK这种情况直接清理PATH里不该出现的旧路径即可。5.4 换成前台启动后能看到日志但还是没头绪当错误信息不再一闪而过你就可以正常解读了。日志里有几个关键字特别值得注意The JAVA_HOME environment variable is not defined correctly环境变量问题回到第2节处理。Address already in use端口被占用回到第3节处理。Could not reserve enough space内存配置问题回到第4节处理。ClassNotFoundException、NoClassDefFoundError这类通常说明JDK版本和Tomcat版本不匹配或者存在依赖缺失需要检查JDK版本和应用依赖。说到版本匹配曾经有项目组用Tomcat 9搭配非常老的JDK版本启动时出现奇怪的类加载异常换了全新JDK之后问题消失。Tomcat各版本对Java版本有明确要求部署前先确认自己用的Tomcat版本支持当前的JDK这是很多人容易忽略的前提条件。5.5 修改完一切还是闪退检查这三个死角第一个死角是logs目录权限。Linux下Tomcat运行用户如果没有logs目录的写权限容器初始化日志时失败也会造成启动中断。这个我遇到过修改了目录属主就好了。第二个死角是server.xml语法错误。虽然闪退主要来自环境问题但手动编辑server.xml后配置文件不合法同样会导致Tomcat启动失败。排查方法是在前台启动时看控制台输出或者检查logs目录里的异常堆栈。第三个死角是防火墙或者外部依赖。如果Tomcat配置了需要访问外部数据库、消息队列等资源而这些资源不可用在某些配置下也会导致启动失败。这种不是传统意义上的闪退但表现形式很像可能窗口停留两秒再退容易出现误判。写在最后根据我个人维护Tomcat的经验闪退问题本身并不复杂真正麻烦的是大多数人一上来就双击脚本连错误信息都没看到只能在黑暗里瞎猜。所以第一课永远是把启动过程放到前台来看要么用catalina.bat run要么去logs目录翻最新日志。看到错误之后参考上面的排查顺序按图索骥绝大多数问题都能在几分钟内解决。还有一个小技巧值得养成习惯在正式部署之前先把JAVA_HOME、端口占用、JAVA_OPTS三件事固化成一次启动自检流程花不了两分钟却能省下后面无数次“一启动就闪退”的排查时间。闪退问题解决之后我通常还会顺手确认一下日志配置和启动用户的权限这些基础项都稳了Tomcat在运行期能给你省下的麻烦远比想象中多。

相关新闻

道路机器人视觉导航数据集:VOC标注与YOLO转换实战

道路机器人视觉导航数据集:VOC标注与YOLO转换实战

简介:面向道路机器人与自动驾驶视觉感知方向的开发者与学习者,这份资源提供了一套以VOC格式标注的路面导航标志识别数据集,覆盖交通灯、马路、左右转指示、黄线、人行道及机器人本体等常见道路元素,可用于目标检测模型的训练、验证…

2026/10/10 23:19:53 阅读更多 →
SpringBoot社区诊所在线挂号与排队系统设计与实现

SpringBoot社区诊所在线挂号与排队系统设计与实现

上个月我陪家人去社区诊所看内科,到了之后发现整个候诊区坐满了人,护士台只有一位护士在忙,手里捏着一沓挂号单,一边喊号一边应付各种“我过号了能插队吗”“我刚挂完号应该排在哪”的询问。就是那个瞬间,我觉得这套流…

2026/10/10 23:19:53 阅读更多 →
Memrise 拿下 Google 年度最佳 App,开源阵营 Anki 这次慌不慌?

Memrise 拿下 Google 年度最佳 App,开源阵营 Anki 这次慌不慌?

Memrise 拿下 Google 年度最佳 App,开源阵营 Anki 这次慌不慌? 【免费下载链接】anki Anki is a smart spaced repetition flashcard program 项目地址: https://gitcode.com/GitHub_Trending/an/anki 每年 Google Play 的年度榜单都会在语言学习…

2026/10/10 23:18:53 阅读更多 →

最新新闻

盛最多水的容器:双指针解法与短板效应原理剖析

盛最多水的容器:双指针解法与短板效应原理剖析

1. 题目本质:面积公式与暴力思路的复杂度瓶颈1.1 题目到底在问什么力扣第11题"盛最多水的容器"是我刷力扣热题100时遇到的第一道“看似简单、想深了却很有意思”的题。题目表述很直白:给定一个长度为 n 的整数数组 height,每个元素…

2026/10/11 0:04:29 阅读更多 →
LeetCode 220:哈希表+桶思想破解存在重复元素 III

LeetCode 220:哈希表+桶思想破解存在重复元素 III

做算法题最怕的不是不会,是觉得题目眼熟然后掉以轻心。LeetCode 220“存在重复元素 III”就是这么一道典型的“披着羊皮的狼”。它顶着“存在重复元素”这个朴素名字,放在哈希表分类下面,看起来和前两题一样是查重,实际上动手一写…

2026/10/11 0:04:29 阅读更多 →
寒假学习计划总是半途而废?用模块化时间块+完成标志重建执行体系

寒假学习计划总是半途而废?用模块化时间块+完成标志重建执行体系

“寒假学习计划 1/27”——看到这个文件名,我第一反应不是佩服,而是一种很真实的亲切感。1月27日,寒假的进度条大概走完三分之一到一半,正是计划新鲜感消退、惰性重新抬头的时间点。很多人寒假计划不是死在没开始,而是…

2026/10/11 0:04:29 阅读更多 →
无人机航拍三维重建全流程:从SfM到网格生成的避坑指南

无人机航拍三维重建全流程:从SfM到网格生成的避坑指南

简介:本资源面向计算机视觉研究者、三维重建方向的学生与开发者,提供一套基于无人机航拍场景的完整三维重建算法实现与项目源码,可用于学术研究、课程教学或工程实战参考。压缩包共54个文件,约20.66MB,以41个Python脚本…

2026/10/11 0:04:29 阅读更多 →
MATLAB/Simulink搭建10机39节点电力系统暂态稳定仿真实战

MATLAB/Simulink搭建10机39节点电力系统暂态稳定仿真实战

1. 从39节点系统开始,一条走向电力系统仿真的务实路径接触电力系统仿真的人,最早绕不开的可就是MATLAB和Simulink这对老搭档。而“10机39节点”这套系统,圈内习惯叫New England系统,是电力系统暂态稳定、潮流计算、低频振荡分析里…

2026/10/11 0:04:29 阅读更多 →
MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

模拟功能模型和晶体管电路的一致性,是模拟混合信号验证里一块老硬骨头。这篇论文速读想聊的MSDV方法,核心就一句话:怎么用形式化的手段,证明你写在系统级的功能模型,和真正拿去流片的晶体管级网表,在行为上…

2026/10/11 0:03:29 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →