2012-04-23 160 views
0

我的客戶端在共享服務器上擁有自己的虛擬主機帳戶,並且他們的帳戶已被暫停,因爲「導致關鍵服務器過載」。我已經看了代碼,它是功能上編程的PHP,它使用了大量的數據庫查詢。我瀏覽過,其中大部分都是「SELECT *」。此數據庫具有10行或更多行和1000多條記錄的表。Php資源釋放

我想知道是否所有的sql查詢都沒有被釋放,但我不確定何時「腳本執行」完成。它是在函數完成執行之後,還是整個頁面已被渲染?它可能是表(結構或記錄)的大小?有沒有人有任何其他想法?

+2

由於磁盤,cpu或內存過載了嗎? – 2012-04-23 16:32:52

+1

託管公司應該告訴你他們的意思是「造成嚴重的服務器過載」...... – Ing 2012-04-23 16:40:53

回答

2

這實際上取決於你客戶的包裝類型,自定義編碼的腳本類型或像wordpress這樣的標準腳本。

曹景偉關鍵服務器超載 - 可能是千頭萬緒:

高內存使用情況:腳本沒有使用單模式或其指定的海量數據到陣列,變量或包括大量的的文件。代碼氣味基本不好設計&。

高CPU:瘋狂長腳本,在每個頁面視圖之間進行復雜計算的長迭代循環或無限循環(套接字)等。

高網絡流量:屏幕Scappers像爬蟲這就是要求從其他網站大量的流量或基本上是抓住外部內容了很多,或者像一個洪流跟蹤腳本。

磁盤佔用率過高:不斷轟擊服務器IO堆棧(寫入和讀取磁盤不斷)

有很多的數據庫查詢的腳本可以分爲:磁盤佔用率過高(讀)+高內存使用情況(迭代的結果)+高速CPU(與結果做的東西))

你應該使用工具來表現本地配置文件中的腳本:xDebugPQP,並找出什麼真正發生的事情。

如果你的客戶認真對待那裏的網站,那麼他們應該投資於VPS。

0

確保您正確關閉了SQL連接。如果您一次執行了大量查詢,則可能會更有效地將連接保持在較長時間。或者,如果您在每次查詢後都沒有關閉它們,可以嘗試這樣做。我必須說10個表不是很多,它會讓我感到驚訝,這是超載共享服務器。

+0

mysql_connect連接在腳本執行結束時關閉.. – 2012-04-23 17:00:31

+0

@勞倫斯Cherone每個腳本有多少個查詢?如果他們有很多這可能是好的。如果不嘗試在每次查詢後關閉連接,看看是否有幫助。讓未使用的連接長時間打開將佔用主機上的大量資源。 – JeremyS 2012-04-23 17:02:09

+0

@LawrenceCherone [檢查出來](http:// stackoverflow。com/questions/5474646/is-it-okay-to-always-leave-a-database-connection-open) – JeremyS 2012-04-23 17:04:54