我有一個Heroku Dyno託管的網站,允許最大512MB的內存。Heroku Dyno上整體內存上升
我的網站允許用戶以CSV格式上傳原始時間序列數據,並且我想要加載測試上傳具有〜100k行(3.2 MB大小)的CSV的性能。用戶界面允許用戶上傳文件,然後依次踢出Sidekiq作業,將文件中的每一行導入到我的數據庫中。它將上傳的文件存儲在dyno的/tmp
存儲器下,我相信每次定期重新啓動dyno都會清除該文件。
所有實際完成沒有錯誤,並且所有100k行被插入。但幾個小時後,我注意到我的網站幾乎沒有響應,我檢查了Heroku指標。
在我開始上傳的確切時間,內存使用量開始增長,並且很快超過了最大512MB。
日誌證實了這一事實 -
# At the start of the job
Aug 22 14:45:51 gb-staging heroku/web.1: source=web.1 dyno=heroku.31750439.f813c7e7-0328-48f8-89d5-db79783b3024 sample#memory_total=412.68MB sample#memory_rss=398.33MB sample#memory_cache=14.36MB sample#memory_swap=0.00MB sample#memory_pgpgin=317194pages sample#memory_pgpgout=211547pages sample#memory_quota=512.00MB
# ~1 hour later
Aug 22 15:53:24 gb-staging heroku/web.1: source=web.1 dyno=heroku.31750439.f813c7e7-0328-48f8-89d5-db79783b3024 sample#memory_total=624.80MB sample#memory_rss=493.34MB sample#memory_cache=0.00MB sample#memory_swap=131.45MB sample#memory_pgpgin=441565pages sample#memory_pgpgout=315269pages sample#memory_quota=512.00MB
Aug 22 15:53:24 gb-staging heroku/web.1: Process running mem=624M(122.0%)
我可以重新啓動測功機來清除這個問題,但我沒有在看指標太多的經驗,所以我想明白了什麼正在發生。
- 如果我的工作在30分鐘內完成,內存使用量可能會持續增長的常見原因是什麼?在工作之前,它很穩定
- 有沒有辦法告訴哪些數據被存儲在內存中?儘管我不知道它是否會比十六進制地址數據更多,但是執行內存轉儲會很棒
- 我可以使用哪些其他工具來更好地瞭解情況?我可以通過上傳另一個大文件以收集更多數據來重現這種情況。
只是有點迷路了,在哪裏開始調查。
謝謝!
編輯: - 我們有收集數據的Heroku New Relic插件。令人懊惱的是,New Relic在同一時間段報告了不同的/正常的內存使用情況值。這是常見的嗎?它是什麼測量?
謝謝,這一切都非常有用!我不知道你可以像這樣觀察對象空間,所以我會嘗試在幾個點上打印出對象的數量,看看我是否注意到了任何東西。我也會看看那篇文章。 – user2490003