![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 chjiang ![]()
![]() |
讓我想了一下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樓
最有價值解答
浩瀚星空 ![]() ![]() |
一般像這種可能需要長時間的動作。(不單單是做檔案寫入,其它動作也是)
要很特別的去注意一件事,網頁有所謂的運行時間。一般預設是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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |