当前位置: 首页 > news >正文

【错误记录】Windows 命令行程序循环暂停问题分析 ( 设置 “ 命令记录 “ 选项 | 启用 “ 丢弃旧的副本 “ 选项 | 将日志重定向到文件 )

文章目录

  • 一、报错信息
  • 二、问题分析
    • 1、Windows 命令行的缓冲区机制
    • 2、命令记录设置
  • 三、解决方案
    • 1、设置 " 命令记录 " 选项
    • 2、将日志重定向到文件






一、报错信息



Java 程序中 , 设置 无限循环 , 每次循环 休眠 10 秒后 , 再执行程序逻辑 , 在命令行中打印日志信息 ;

for (;;) {try {// 休眠 10 秒钟Thread.sleep(10000);// 程序逻辑System.out.println("日志内容");} catch (Exception e) {e.printStackTrace();}
}

上述程序 运行了 2 天后 , 突然出现了 循环暂停情况 , 连续暂停了 几十分钟 到 数个小时 , 此时 在 命令行敲一下回车 , 程序再次恢复运行 ;

期间打印了大量的日志信息 , 大约有 30MB 左右 ;





二、问题分析




1、Windows 命令行的缓冲区机制


在 Windows 的 Cmd 或 PowerShell 中 , 默认的 屏幕缓冲区 大小有限 , 如果 程序输出的日志超过 缓冲区容量 , 后续的 System.out.println() 操作会被阻塞 , 直到缓冲区腾出空间 ;

设置 保留的历史缓冲区数量 , 若 开启 " 丢弃旧的副本 ( Discard Old Duplicates ) " 选项 , 当 缓冲区满时 会自动丢弃旧数据 , 避免阻塞 , 如果未开启该选项 , 则 缓冲区满后写入操作会挂起 ;

用户在 命令行窗口 敲击回车时 , 会强制刷新缓冲区 , 释放被阻塞的输出操作 , 程序得以继续运行 , 但是日志再输出一些 , 几小时内又会立刻写满 ;


2、命令记录设置


Windows 命令提示符中的 命令记录 设置 的 缓冲区大小、缓冲区数量 丢弃旧的副本 是控制命令行历史记录与显示的关键设置 , 如下图所示 :

在这里插入图片描述

缓冲区大小 ( Buffer Size )命令行窗口的 屏幕缓冲区 大小 , 即能够存储的历史输出行数 ;

缓冲区大小 默认值为 50 , 表示最多保存 50 行历史记录 , 若输出内容超过此限制 , 旧内容会被 覆盖或丢弃 , 取决于 " 丢弃旧的副本 " 选项设置 ;

缓冲区大小 设置为 更大值 可避免长文本被截断 , 完整查看大量输出内容 ;


缓冲区数量 ( Buffer Amount )存储的历史命令数量 , 用于控制历史记录的存储容量 ;


丢弃旧的副本 ( Discard Old Duplicates ) 选项 用于 控制 超出缓冲区容量 时是否保留旧数据 ;

  • 启用 : 当输出内容超出缓冲区大小时 , 自动丢弃 最旧的内容 ;
  • 禁用 : 保留缓冲区内的所有内容 , 但新内容可能无法显示 , 需手动滚动查看 ;
  • 适用场景 : 需长期监控大量输出时建议禁用 , 日常使用可启用以减少内存占用 ;




三、解决方案




1、设置 " 命令记录 " 选项


右键点击 命令提示符 标题 , 在弹出的菜单中 , 点击 " 属性 " 选项 ;

在这里插入图片描述

在 " 命令提示符 " 属性 对话框 的 选项 面板中 , 设置 命令记录 选项 ,

设置 缓冲区大小 999 , 缓冲区数量 999 , 勾选 " 丢弃旧的副本 " 选项 ;

在这里插入图片描述


2、将日志重定向到文件


通过命令行启动程序时 , 将 命令行输出 重定向到文件 ;

java Main > log.txt 2>&1

上述命令 可以 将 Java 程序 Main 的标准输出和标准错误全部重定向到文件 log.txt 中 ;

相关文章:

  • SpringBoot和微服务学习记录Day3
  • Java 自动装箱与拆箱:基本数据类型与包装类的转换
  • 【Java面试笔记:基础】1.谈谈你对Java平台的理解?
  • pip永久换镜像地址
  • 解决Chrome浏览器访问https提示“您的连接不是私密连接”的问题
  • DSRAM介绍
  • 【NCCL】transport建立(一)
  • c++学习之---vector
  • 【集群IP管理分配技术_DHCP】二、DHCP核心功能与技术实现
  • 实训Day-1 漏洞攻击实战
  • 深入解析React.lazy与Suspense:现代React应用的性能优化利器
  • 【网络安全】CI/CD 流水线漏洞
  • 动态监控进程
  • 固定总价合同工程范围变更,如果规避风险
  • 【分布式理论17】分布式调度3:分布式架构-从中央式调度到共享状态调度
  • 下载pycharm遇到的问题及解决方法
  • Docker Compose 和 Kubernetes(k8s)区别
  • 力扣2492:并查集/dfs
  • 【Flink SQL实战】 UTC 时区格式的 ISO 时间转东八区时间
  • 深度学习3.5图像分类数据集
  • 人民日报聚焦外贸“重镇”福建晋江:多元化布局扩大“朋友圈”
  • 上交所召开私募机构座谈会,与会机构:中国资产具备显著估值修复和提升潜力,将坚定持有
  • 清华成立教育学院:加快高层次人才培养、加强教育学科建设
  • 中小企业收款难何解?快速认定企业身份并理顺付款责任链条
  • 新疆维吾尔自治区交通运输厅副厅长刘艳东接受审查调查
  • 日本首相石破茂向靖国神社献祭品