記憶體增長對測試系統的影響
重要的是要認清到記憶體增長並不一定是代表著測試系統存在問題。例如,如果code module從硬體獲取測量數據並將數據儲存在陣列中,則code module的記憶體使用量將隨著數據的儲存而增加。通常這種類型的記憶體增長是預料到會發生的。
然而,如果code module或其他測試系統零件在不需要時沒有釋放所分配的記憶體,則記憶體使用量將隨著測試系統的執行而不斷增加。一旦測試系統使用了所有可用記憶體,這最終可能會導致記憶體不足錯誤或崩潰。這種在多次test sequences迭代中不受控制的記憶體增長通常稱為記憶體洩漏。
記憶體不足錯誤的原因
發生記憶體不足錯誤的原因有很多種:
- 單個test loop期間記憶體增長過多。
- 如果single UUT 的test sequences嘗試分配的記憶體比測試系統可用的記憶體還要更多,則可能會發生這種情況。而這通常會導致記憶體不足錯誤,類似於LabVIEW 中的內記憶體已滿錯誤中描述的錯誤。
- 例如,test code嘗試分配連續的記憶體區塊來儲存陣列、字串或其他大型數據集。
- 多個test loop無限增長的記憶體。
- 如果test sequences或test sequences調用的code module中存在記憶體洩漏,則可能會發生這種情況。
- 記憶體洩漏的範例包括:未能釋放不再需要的記憶體,或者忘記在sequences結束時關閉 instrument handles。
記憶體增長故障排除過程
由於需要調查的程式碼量體很大,因此很難追踪大型測試系統中的記憶體增長問題。另外,測試系統得在執行很長一段時間之後,記憶體增長才會導致錯誤,並且可能會導致測試系統崩潰或其他不穩定。
由於這些原因,解決記憶體增長問題是一個系統化的過程,必須分析記憶體使用數據以了解正在發生的增長類型。首先,將測試程式碼縮小到能重現記憶體增長的簡化版本,並檢查簡化的程式碼以解決記憶體增長問題。下面的逐步指南描述了此過程。
在本系列故障排除過程中的相關要點提供了其他文件的連結。他們將提供有關應採取的故障排除步驟的詳細信息,以及指導如何解釋過程中每個階段收集的結果。
逐步故障排除指南
- 請參閱 TestStand 系統的記憶體限制文件來檢視測試系統的記憶體限制。
- 使用連結文件檢查測試系統設置和配置,以了解測試系統可用的記憶體容量。需要考慮的事情是:
- code modules的類型以及它們是 32 位元還是 64 位元。
- code modules在in-process 或是 out-of-process 執行。
- Result collection的設定。
- Model plugin的設定。
- 使用記憶體分析工具收集有關測試系統記憶體使用情況的數據。
- 運行簡化的程式碼來確定正在增長的記憶體類型以及每個test case循環的增長量。連結的文章有解釋如何監控:
- 當前加載到實際記憶體中的虛擬記憶體,也稱為Private Working Set。
- Object handles,可以引用儀器、LabVIEW VI 和其他操作。
- Threads。
- User objects,包括視窗、選單和游標。
- Graphics Device Interface (GDI) objects。
- 簡化 TestStand sequence,以專注於導致問題的較小step集。 Characterizing TestStand 系統中的記憶體問題文件提供如何執行此操作的指導。此故障排除過程應遵循以下結構:
- 在縮小test case範圍時,使用步驟 3 中的記憶體分析工具來收集記憶體增長數據。
- 確定結果收集是否有助於記憶體增長,如連結文件中所述。這將包括:
- 禁用model plugins。
- 禁用特定 test sequences或整個測試站的 result collectio。
- 使用不同的 TestStand process models執行,並注意是否可以觀察到記憶體增長的差異。請按照為TestStand Sequence File 指定Process Model中的步驟獲取指導說明。
- 跳過 test case中的step或sequence以縮小有問題的step集的範圍。
- 如果可能,將 test sequences縮小到特定的code modules。
- 通過檢查test sequence和code module來辨別並解決記憶體增長問題。
- 如果該問題僅在啟用 result collection或model plugins時出現,請參閱防止 TestStand 報告生成出現記憶體問題文件來配置 result processing 設定以節省記憶體。
- 將問題來源縮小到特定sequence或code module。使用辨別和解決 TestStand 系統中的記憶體增長問題來確定記憶體增長屬於哪個類別。
- 如果問題出現在 LabVIEW code modules中,請參閱文章中的LabVIEW code modules部分的步驟 5b。
- 如果問題發生在 LabWindows/CVI code modules中,請參閱文章中的LabWindows/CVI code modules部分的步驟 5b。
- 如果問題發生在 .NET code modules中,請參閱文章的步驟 5b 中的.NET code modules部分。
- 按照本文件中連結的文章進行操作後,返回步驟 3 以確定記憶體增長問題是否已解決。