網路城邦
上一篇 回創作列表 下一篇  字體:
CPU和記憶體都不能吃到飽的!
2019/07/03 08:08:30瀏覽1272|回應0|推薦15

因為幾年來我的辨識核心運算效能持續增加,原有的四車道動態車牌辨識軟體,在正常運作下,使用i7等級電腦已經足以增加到六車道的辨識,所以售價不變,軟體架構變成能辨識六車道了!但是有客戶反應,偶爾會出現這種狀況!沒說我的程式哪裡錯誤?單純就是因為記憶體(CPU)使用量太多,引起作業系統的緊張,主動將我的程式關閉了!

其實我的動態辨識軟體記憶體管理是很嚴謹的,有直接用影像作的動態偵測機制,知道沒車(沒動靜)時系統會減少作完整辨識的次數,讓系統處於半休息狀態。即使六車道都有車,辨識同時運作時,記憶體用量通常也不過六七百M,但是只要偶爾資料處理略為塞車,譬如其他的程式佔用了CPU,我的程式等待辨識的影像多了一點,記憶體用量就有可能衝到一G左右,就會出現類似狀況了!

老實說,我管不了別的程式如何使用CPU或記憶體,但是只要我的軟體用量超標,作業系統就會直接給「」開罰單了!怎麼辦?我自己作測試時從來沒出現過這種情形,甚至我去他們的現場作壓力測試時也沒有出現這個訊息,但是客戶當然不會騙我!有圖為證,我的程式真的會在某種特殊狀況時當掉!這是非常嚴肅的問題!既然客戶都抓到畫面說他的作業系統到957M就會關閉我的程式,我的軟體就必須避免出現這種狀況。

網路資訊說系統會限制32位元程式記憶體用量,理論上是2G上限,實際上可能更低就警告了!像上面的例子,還不到一G就開單了!我第一個嘗試是改編譯成64位元的執行檔,但是記憶體容許量是大了,計算速度卻變慢了!速度是最重要的產品規格,這樣當然不行!反正我的程式其實用不到一G以上的記憶體,只是有些環境變因會讓我的軟體偶爾出現讓系統緊張的尖峰用量。

怎麼辦?那就自我約束嘛!在軟體內作自我偵測控制,不讓記憶體及CPU用量超過作業系統的警戒線。我於是實作了可以監測系統以及我的軟體本身CPU及記憶體用量的程式,不必等作業系統來管我,該減速時就自動減速了!加入這些機制,又花了兩天調整順暢度與效率,以後應該可以避免這種意外發生了!

其實一開始我很納悶:為什麼以前四車道軟體賣了好多年,都沒出現這種問題,現在卻出現了呢?現在想想應該是一個倉儲的概念,我會設法定時抓畫面作辨識,如果辨識不完就不會繼續進貨了!但是四車道時「一次進貨」是四個車道畫面,現在則變成六個畫面,流量變大,偶爾的意外阻塞時「災情」(資料堵塞量)也就會變大,如果作業系統不給我通融,我租用的倉庫就會爆滿了!在倉庫允許存量不變的情況下,當然就是要有更精準的進出貨管制了!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:http://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=127933266