記一次Excel匯出導致記憶體耗盡的問題

2021-10-09 18:22:29 字數 736 閱讀 7653

php fatal error:  allowed memory size of 298844160 bytes exhausted (tried to allocate 262144 bytes)
一開始首先想到是excel匯出時很吃記憶體,資料一多就容易將記憶體耗盡,於是先從**上做優化,取完資料後將無用的陣列全部unset()掉。

結果意想不到的問題,是php-fpm報"time out"錯誤,於是再將php-fpm超時處理修改下:

ini_set('max_execution_time', '300');

ini_set('memory_limit', '285m');

然後再做嘗試,繼續等待……結果又是nginx報504錯誤……真是按下葫蘆浮起瓢,再去nginx上新增引數:

...

fastcgi_read_timeout 300;

...

總結下,今天遇到問題的原因——

大量資料的處理和平時curd是很不相同的場景,這種情形下對記憶體和cpu都有極大的考驗。我們習慣了orm的方便卻往往忽略它帶來的效能損耗。orm容易取出全量字段,在資料量大時容易占用太多記憶體,同時orm會在取出資料後做額外封裝,這又是一筆額外的開銷,資料量小時看不出來,但是資料量大時就很要命。因此在處理資料量的請求時慎用orm,而是採用比較貼近原生sql的類似querybuilder的寫法,後者在執行效率和開發效率中取乙個平衡點。

記一次EventBus記憶體洩露導致的專案問題

今天遇到乙個很尷尬的問題,就是eventbus的使用過程中,在post乙個event後,於此同時,在接收event的方法中打斷點監控event的接收。這個時候我遇到很尷尬的問題,會重複接收到很多次的event事件 我當前所用的開發框架是支援將業務,資料更新,檢視更新從activity中抽離,在act...

記一次Excel匯入資料

使用excel匯入過程比較簡單,就是由於poi的版本,所以之前的一些方法可能不能使用了,特此開一篇文章記錄.使用poi依賴org.apache.poi poi3.17 主要 value upload method requestmethod.post public operaresult uploa...

記一次Redis bitmap導致的miss問題

redis bitmaps 基礎概念 redis 記憶體淘汰機制 大致需求 指令碼批量匯入使用者資料到redis中,使用bitmap標記使用者是否在匯入的白名單中。使用者量級 億。key使用了分片處理,把key分成了10w個,每個key占用 1億 10w 1000 個bit。理想是key1用於標記u...