台灣最大程式設計社群網站
線上人數
811
 
會員總數:246202
討論主題:189774
歡迎您免費加入會員
討論區列表 >> PHP >> 關於大量連線讀寫檔案的問題(漏寫資料)
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
關於大量連線讀寫檔案的問題(漏寫資料)
價值 : 50 QP  點閱數:1345 回應數:2
樓主

chjiang
初學者
78 84
1328 93
發送站內信

今天和同事聊到,關於Java的Singleton觀念
讓我想了一下PHP在多人同時R/W同一個檔案造成的問題

因為小弟寫的程式(大多偏小型案子),以資料一致性的概念,大多都是交給 DBMS 來處理
不過,今天試了一下多人同時在R/W同一個檔案,程式碼如下:



然後利用 JMeter 來進行測試
先進行小量測試(執行緒數量:10,迴圈次數:10),執行完,正常寫入 100 筆資料
後來,進行較大量的測試(執行緒數量:100,迴圈次數:100),正常應該是寫入 10000 筆log
但,經大量測試幾次後,寫入的筆數都大約在 9950~9980 筆數,都會漏掉幾十筆

我也google了關於 PHP 的 Singleton Design Pattern
看了不是很懂,請前輩們指導....
關於,如果要在 php 同時大量連線寫入log(檔案), 怎麼可以正確寫入log

可能在描述上,觀念也有誤,也歡迎指導
謝謝各位前輩:)


本篇文章發表於2012-02-01 11:28
1樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
一般像這種可能需要長時間的動作。(不單單是做檔案寫入,其它動作也是)

要很特別的去注意一件事,網頁有所謂的運行時間。一般預設是30秒。

這是WEB SERVER的安全性上的設定。防止連結超過一定的時間,照成伺服器負載過大的問題。

所以你得看看你跑的時間是否超過一定的時間照成WEB SERVER給你強制停止。所以就有後面的資料沒寫入完全。

另外一種可能性,就是你變數沒設定好。照成RAM過大失敗。
本篇文章回覆於2012-02-01 13:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

chjiang
檢舉此回應
To 浩瀚星空:
非常感謝您的指導~
關於你的回答中提到『變數沒設定好。照成RAM過大失敗』
比較不可能,因為我沒傳變數,所以寫入都是data null的字串

但,我剛又將 web server 的 connection 加大~
後來發現,"有可能"是系統在建立執行緒的時候發生錯誤所導致(無法正常寫入log)
只是不確是 JMeter 發生錯誤 還是 Web Server
因為在JMeter的Response Message有顯示 Error 訊息
個人感覺是 JMeter 的問題,但爬文後,也有人說,不是 JMeter
也有可能 Web Server 在建立執行緒是 connection refused.

建立執行緒的錯誤,可能是硬體資源所導致
maybe像浩瀚星空前輩提到的RAM的使用上Error

謝謝您的意見分享與指導!!
本篇文章回覆於2012-02-01 14:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.