之前在使用訊息佇列傳輸資料時發生了資料位莫名丟失兩個位元組的情況。
經過一番debug
找到了問題的原因,位元組對齊問題。
我的訊息佇列資訊結構體原本的格式如下:
struct msg_data
;
問題就出在 split這個字段,它為16bits,而一般系統都是32bits一行一行儲存資料的,由於 split 之後offset是32bits的,於是系統就會將 split後面填入16bits,也就整個講後面的data欄位擠出了兩個位元組。
在傳送時,我的msgsnd函式仍然設定message size是 1018個位元組(實際由於對其已經是1020位元組),所以data[998] data[999]就丟失了
修改辦法就是在寫結構體時讓它天然對齊,例如換位置:
struct msg_data
;
這樣就對齊了
bug消除
post傳參部分資料丟失
tomcat獲取post傳的引數,只接收到前半部分引數,後半部分引數沒有接收到 可能的原因是 tomcat中maxparametercount是用來限制請求中的最大參數量,預設是10000,如果超過這個數值,會預設把多出的引數擷取掉 將被容器自動解析的最大數量的引數和值對 get加上post 引數值...
ELK redis訊息佇列,防止資料丟失
準備工作 這裡我準備了3臺虛擬機器 ip 部署的服務 192.168 131 80 elasticsearch,kibana 192.168 131 81 logstash,redis 192.168 131 82 logstash 工作流程 1 82的logstash 獲取日誌資訊傳送到 81 的...
poi批量匯入資料時部分資料丟失
解決思路 debug 發現physicalnumberofcells代表的單元格數量與 列數不符,這就意味著最後兩列的單元格根本沒有讀取到。查閱資料 發現獲取單元格列數使用的是getphysicalnumberofcells方法,而該方法讀取的是不為空的單元格總列數,恰好匯入的 中有兩列為空的單元格...