→ kdjf: 你寫的東西是driver? 12/27 13:14
→ kuangs: 不是driver 純粹收uart(從/dev/ttyUSB) 存到sd卡 12/27 14:01
→ kenduest: 感覺還是你的程式本身佔用太多記憶體所以 crash 12/27 16:30
→ kenduest: 你可以簡單寫個 script 放在 crontab 內定期執行 12/27 16:31
→ kenduest: 程式碼就是跑 ps aux | grep your_program > result.txt 12/27 16:32
→ kenduest: 然後檢視一下記憶體佔用狀態,可以初步確認是否該問題 12/27 16:33
推 readonly: 感覺是kernel mmc/sd driver 的問題。 12/27 16:40
→ kuangs: readonly 大大 請問會這樣認為 是因為inode_cache 的原因 12/27 16:51
→ kuangs: 嗎? 12/27 16:51
→ kenduest: 系統 cache 本身有管理機制,不大可能因為用太多而當掉 12/27 17:07
→ danny8376: inode_cache不管怎長都無所謂 有需要系統會自己清.... 12/27 23:58
→ kdjf: 會不會是跟driver要了什麼東西後沒有放掉? 軟體本身memery 12/28 17:15
→ kdjf: leak頂多就被oom killer砍了,系統一般不會掛點 12/28 17:15
→ bitlife: 樓上指出重點,通常只有kernel和driver會搞死系統,user程 12/28 19:01
→ bitlife: 式除非是用來專攻os漏洞的,不然幾乎只會死自己不死系統 12/28 19:02
→ fourdollars: 感覺你是檔案打開後沒有做相對應的關閉動作,導致開 12/29 13:48
→ fourdollars: 啟的檔案數量太多,超過了系統上限,並不是記憶體洩 12/29 13:48
→ fourdollars: 漏的問題。 12/29 13:48
→ kuangs: to fourdollar: 寫檔案我採用 開檔>寫入>關閉 12/29 14:28
→ kuangs: 每1hr 換一個檔案 12/29 14:29
→ kuangs: 有考慮用 開檔 > 寫檔 (到達換檔案條件1hr)>關檔 12/29 14:30
→ kuangs: 這兩種方法會有差別嗎?? 12/29 14:30
→ kuangs: to kdjf : 是發生out of memory 然後開始砍程式 砍完 12/29 14:32
→ kuangs: memory 也沒釋放 最後沒東西砍 就死機了!! 12/29 14:32
→ kenduest: 還是你要用 bash 的 ulimit 限制一下當下的資源環境 12/29 17:57
→ kenduest: 限制一下 file handle 與 memory 使用最大限制 12/29 17:57
→ kenduest: 超過使用量就可以限制住,資源也不會過度被耗費使用 12/29 17:57
→ kenduest: 只是你程式可能最後會 crash,但是系統至少不會 crash 12/29 17:58
→ kdjf: 你怎麼讀uart的? 把code放上來吧 12/29 18:22
→ fourdollars: 也許可以定期去檢查 /proc/<pid>/ 底下有多少個數字 12/30 08:55
→ fourdollars: 檔案來驗證是不是我所說的檔案數量過多的問題。 12/30 08:55
→ kuangs: to fourdollars : 是看/proc/<pid>/limit 這檔案嗎?? 12/30 11:14
→ kuangs: 裡面 只有 max stack size = 2088960 Max open file=1024 12/30 11:15
→ kuangs: Max locked memory=65536 Max msgqueue size = 819200 12/30 11:15
→ kuangs: 這四個有值 其他都是unlimited 12/30 11:16
→ kuangs: to kenduest : 這是個辦法!但是我比較想正解.. 找出問題 12/30 11:17
→ kuangs: 所在! 12/30 11:17