【錯誤記錄】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 中 ;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902349.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32H5開發陀螺儀LSM6DSV16X(1)----輪詢獲取陀螺儀數據

STM32H5開發陀螺儀LSM6DSV16X.1--輪詢獲取陀螺儀數據 概述視頻教學樣品申請源碼下載硬件準備參考程序通信模式管腳定義IIC通信模式速率新建工程工程模板保存工程路徑芯片配置工程模板選擇時鐘設置UART配置UART屬性配置設置e2studio堆棧e2studio的重定向printf設置R_SCI_UART_Op…

Android端使用無障礙服務實現遠程、自動刷短視頻

最近在做一個基于無障礙自動刷短視頻的APP,需要支持用任意藍牙遙控器遠程控制, 把無障礙服務流程大致研究了一下,從下面3個部分做一下小結。 1、需要可調整自動上滑距離和速度以適配不同的屏幕和應用 智能適配99%機型,滑動參數可…

Spark和Hadoop的區別和聯系

Hadoop 和 Spark 的區別 1. 架構 Hadoop:基于 HDFS(分布式文件系統)和 MapReduce(分布式計算框架)。HDFS 負責數據的分布式存儲,而 MapReduce 是其主要的計算框架,通過 Map 和 Reduce 任務進行…

【版本控制】idea中使用git

大家好,我是jstart千語。接下來繼續對git的內容進行講解。也是在開發中最常使用,最重要的部分,在idea中操作git。目錄在右側哦。 如果需要git命令的詳解: 【版本控制】git命令使用大全-CSDN博客 一、配置git 要先關閉項目&#xf…

論文閱讀:2023 arxiv A Survey of Reinforcement Learning from Human Feedback

A Survey of Reinforcement Learning from Human Feedback https://arxiv.org/pdf/2312.14925 https://www.doubao.com/chat/3506943124865538 速覽 這篇論文是關于“從人類反饋中進行強化學習(RLHF)”的綜述,核心是講如何讓AI通過人類反…

單片機 + 圖像處理芯片 + TFT彩屏 進度條控件

進度條控件使用說明 概述 本進度條控件基于單片機 RA8889/RA6809 TFT開發,提供了簡單易用的進度顯示功能。控件支持多個進度條同時顯示、自定義顏色、邊框和標簽等特性,適用于需要直觀顯示進度信息的各類應用場景。 特性 支持多個進度條同時顯示可…

數據處理: OPTICS聚類及Python實現

1. 基本原理 OPTICS(Ordering Points To Identify the Clustering Structure)是一種基于密度的聚類算法,可視為DBSCAN的改進版本。它能夠識別不同密度的簇,并自動發現數據中的層次化聚類結構,適用于復雜分布的數據集…

PyCharm 在 Linux 上的完整安裝與使用指南

PyCharm 在 Linux 上的完整安裝與使用指南—目錄 一、PyCharm 簡介二、下載與安裝1. 下載 PyCharm2. 安裝前的依賴準備3. 安裝步驟方法 1:通過 Snap 安裝(推薦)方法 2:手動安裝(從官網下載 .tar.gz 文件)方…

【React】路由器 React-Router

安裝路由模式路由組件和屬性 (Link、NavLink、Outlet、Routes、Navigate、element)路由傳參 ( Hook:useParams 、useSearchParams )路由跳轉(Hook:useNavigate)路由的構建 前端路由指的是一種將瀏覽器URL與特定頁面或視圖關聯起來…

Flowable7.x學習筆記(十)分頁查詢已部署 BPMN XML 流程

前言 上一篇文章我們已經完成了流程的部署功能,那么下一步就是要激活流程了,但是我們要需要明確的指定具體要激活部署后的哪一條流程,所以我們先把已部署的基礎信息以及具體定義信息分頁查詢出來,本文先把基礎代碼生成以及完成分頁…

【論文閱讀23】-地下水預測-TCN-LSTM-Attention(2024-11)

這篇論文主要圍繞利用深度學習模型檢測地下水位異常以識別地震前兆展開。 [1] Chen X, Yang L, Liao X, et al. Groundwater level prediction and earthquake precursor anomaly analysis based on TCN-LSTM-attention network[J]. IEEE Access, 2024, 12: 176696-176718. 期刊…

electron從安裝到啟動再到打包全教程

目錄 介紹 安裝 修改npm包配置 執行安裝命令 源代碼 運行 打包 先安裝git, 安裝打包工具 導入打包工具 執行打包命令 總結 介紹 electron確實好用,但安裝是真的要耗費半條命。每次安裝都會遇到各種問題,然后解決了之后。后面就不需要安裝了,但有時候比如電腦重裝…

【Rust 精進之路之第4篇-數據基石·上】標量類型:整數、浮點數、布爾與字符的精妙之處

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025-04-20 引言:構成萬物的“原子”——標量類型 在上一篇文章【變量觀】中,我們深入探討了 Rust 如何通過 let、mut、const…

消息中間件RabbitMQ:簡要介紹及其Windows安裝流程

一、簡要介紹 定義:RabbitMQ 是一個開源消息中間件,用于實現消息隊列和異步通信。 場景:適用于分布式系統、異步任務處理、消息解耦、負載均衡等場景。 比喻:RabbitMQ 就像是快遞公司,負責在不同系統間安全快速地傳遞…

Docker概念詳解

文章目錄 一、Docker:容器化應用的基石1.1 環境1.2 Docker 是什么1.3 Docker鏡像1.3.1 基礎鏡像(Base Image)1.3.2 Dockerfile1.3.3 容器鏡像(Container Image) 1.4 Registry1.5 容器1.6 Docker VS 虛擬機 二、Docker 的架構原理2.1 C/S軟件架…

linux查看及修改用戶過期時間

修改用戶有效期 密碼到期時間 sudo chage -E 2025-12-31 username sudo chage -M 180 username sudo chage -d $(date %F) username 查詢用戶密碼到期時間 for user in $(cat /etc/passwd |cut -d: -f1); do echo $user; chage -l $user | grep "Password expires"; …

CGAL 計算直線之間的距離(3D)

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 這里的計算思路很簡單: 1、首先將兩個三維直線均平移至過原點處,這里兩條直線可以構成一個平面normal。 2、如果兩個直線平行,那么兩條直線之間的距離就轉換為直線上一點到另一直線的距離。 3、如果兩個直線不平行,則可…

<項目代碼>YOLO小船識別<目標檢測>

項目代碼下載鏈接 YOLOv8是一種單階段(one-stage)檢測算法,它將目標檢測問題轉化為一個回歸問題,能夠在一次前向傳播過程中同時完成目標的分類和定位任務。相較于兩階段檢測算法(如Faster R-CNN)&#xff0…

基于RK3588+FPGA+AI YOLO全國產化的無人船目標檢測系統(二)平臺設計

基于項目需求確定國產 AI 平臺的總體架構設計,完成硬件單元的選擇和搭建以及開發工具鏈的配置工作。 4.1 國產 AI 平臺總體架構 本文設計了一套靈活高效的國產 AI 平臺總體架構,設計方法是在嵌入式平 臺上使用串行總線( Peripheral Co…

Typescript中的泛型約束extends keyof

概要 本文主要分享Typescript中泛型約束的使用方法。在開發過程中,通過使用該方法,可以在編譯階段,幫助我們查找到一些潛在的空值引用錯誤。 代碼和實現 我們預先定義了IUser接口,接口包括了id,姓名,性別…