星海爭霸21全功能兌換碼新手獎勵1、7小時遊戲時間(14天內)解除所有試玩版本限制直到7小時耗盡,如種族、匹配模式、戰役、地圖等詳細資訊(150119更新)4505624695013984483730049
2020-11-30 03:45:43
在匯出訂單資料的時候,當訂單量達到13849的時候,頁面就直接返回:500了。檢視nginx紀錄檔,錯誤資訊如下:
從nginx紀錄檔中可知,是記憶體不夠用了,預設一個php進程允許佔用的記憶體是134217728bytes,而這個php進程還需要1048560bytes記憶體才能往下執行。
在php.ini中有關於記憶體的限制:
memory_limit = 128M //128M=131072K=134217728b
我可以把這個值改的大一點來解決問題。
但為什麼才1萬多資料就佔去了128M的記憶體那?
於是用 echo__LINE__.":".memory_get_usage(),"<br>";
逐行看程式記憶體占用,以此來優化記憶體
去掉多餘函數和變數
程式碼中的空格和註釋都不影響記憶體的占用,但呼叫檔案中多餘的函數和變數就會佔用記憶體,於是把不用的函數方法和變數刪除掉,尤其是一些複製過來的檔案,會有很多不需要的方法,一定要刪掉
不要宣告多餘的變數
如:
不用的變數及時釋放掉
有些變數都是過程變數,尤其是做一些資料格式化轉換的時候,一些原始的,過度的變數要及時釋放掉
如:
優化函數返回結果大小
函數盡可能的只返回每次呼叫所需要的結果集
比如:要得到的是:$datastruct
優化mysql返回結果集的大小(效果顯著)
查詢了一下表中資料的大小 (看圖)
大小:2.52MB.
再看看結果集在PHP中佔的記憶體:
記憶體耗用:(76201912-1086264)/1024/1024 = 71.64M
哇 PHP的陣列太佔記憶體了
網上有人做過陣列佔用記憶體的測試,如下:
PHP中的陣列是用一種HASH結構(HashTable)來實現的,
關於PHP中的陣列的實現,鳥哥有一篇文章介紹過:深入理解PHP之陣列(遍歷順序)
那麼我們怎麼優化那?
1:縮小返回的結果集,一開始是查詢出了所有欄位,改成 只返回需要的欄位
2:在1的基礎上,我們再使用 mysql_unbuffered_query來查詢資料
快取裡盡量只存需要的資訊
目前我們常用redis memcache做快取,如果存全量資訊,隨著資料量的增加,全量資訊會成倍數的增加,都很消耗機器記憶體
設計資料庫的時候,把資料庫欄位設計的盡可能小(前提是滿足需求)
1:為了省空間 2:為了查詢的時候
這樣基本就搞定了。
推薦以下鳥哥的三篇文章:(http://www.laruence.com/)
深入理解PHP記憶體管理之誰動了我的記憶體
深入理解PHP之陣列(遍歷順序)
PHP中的Hash演算法
相關文章
星海爭霸21全功能兌換碼新手獎勵1、7小時遊戲時間(14天內)解除所有試玩版本限制直到7小時耗盡,如種族、匹配模式、戰役、地圖等詳細資訊(150119更新)4505624695013984483730049
2020-11-30 03:45:43
我們經常會玩決勝時刻戰區遊戲,但是有很多朋友不知道決勝時刻戰區國際服註冊方法,下面就詳細說下決勝時刻戰區國際服註冊方法。1首先我們開啟自己電腦中的瀏覽器,比如360瀏覽器
2020-11-29 16:08:59
決勝時刻黑色行動4的應用獲取的方法。1準備好網路的網速,開啟瀏覽器的頁面。 2決勝時刻黑色行動4將其輸入到搜尋頁中,點選搜尋。 3選擇圖中展示的決勝時刻黑色行動4中文版網頁
2020-11-29 16:06:30
決勝時刻是一個很好玩的遊戲,但是安裝過程比較困難,下面小編和你分享一下經驗! 1一般有很多個壓縮檔案的那種,任意解壓一個壓縮包之後會生成一個映象用虛擬光碟機載入,之後按用光
2020-11-29 10:07:32
小編教你決勝時刻9BO2.怎麼安裝,希望你的生活多姿多彩~ 1首先,你買的基本可以確定,是盜版,或者說所謂的偽正版——同學,多去steam吧或者戰地3吧看一看,會提高你對盜版/偽正版的鑑
2020-11-29 05:49:58
目前很多決勝時刻的玩家都在找版本10的中文版,其實現在正版的當中還沒有中文,退而求其次吧,小編這裡分享一些貼圖大家參考一下 1基礎選單,直接看圖片吧 2基礎選單,直接看圖片吧 3
2020-11-29 05:29:49