是什麼耗盡了我的 VPS 內存?

是什麼耗盡了我的 VPS 內存?

我正在運行 top,發現在 502968 KB 中,已使用 48064 KB,剩下 16884 KB 可用。但是當我查看各個進程時,我發現 mysql 有時消耗了我的 RAM 的 9.4% - 但其他似乎沒有消耗任何東西。是什麼消耗了我所有的 RAM?

這是頂部的螢幕截圖:

top - 20:46:07 up 1 min,  1 user,  load average: 0.18, 0.05, 0.02
Tasks:  81 total,   1 running,  80 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.4 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    502968 total,   241236 used,   261732 free,    10488 buffers
KiB Swap:   524284 total,        0 used,   524284 free,   106756 cached

PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
1584 dmackey   20   0 20508 1372 1000 R   0.4  0.3   0:00.01 top
1 root      20   0 26664 2456 1340 S   0.0  0.5   0:00.69 init
2 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kthreadd
3 root      20   0     0    0    0 S   0.0  0.0   0:00.01 ksoftirqd/0
4 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kworker/0:0
5 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kworker/0:0H
6 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kworker/u:0
7 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kworker/u:0H
8 root      rt   0     0    0    0 S   0.0  0.0   0:00.00 migration/0
9 root      20   0     0    0    0 S   0.0  0.0   0:00.00 rcu_bh
10 root      20   0     0    0    0 S   0.0  0.0   0:00.24 rcu_sched
11 root      rt   0     0    0    0 S   0.0  0.0   0:00.00 watchdog/0
12 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 cpuset
13 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 khelper
14 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kdevtmpfs
15 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 netns
16 root      20   0     0    0    0 S   0.0  0.0   0:00.00 bdi-default

這是免費的:

            total       used       free     shared    buffers     cached
Mem:        502968     355252     147716          0      10816     111548
-/+ buffers/cache:     232888     270080
Swap:       524284          0     524284

答案1

沒有什麼。

這是Linux,那就是怎麼運作的

它將使用「空閒」記憶體進行磁碟緩存,因為資源未充分利用有什麼意義呢?

當進程需要更多記憶體時,它會向核心請求,並且(通常)獲取它。

哦.. MySQL 將使用盡可能多的資源(如 中配置的那樣/etc/my.cnf),以便將索引、查詢和表從磁碟快取到記憶體中,從而加快存取速度。

答案2

它只是最後一次使用時遺留在記憶體中的任何垃圾。最有可能的是,它是從磁碟讀取或寫入磁碟的資料。作業系統不會釋放內存,因為這會造成浪費,原因有三:

  1. 如果記憶體沒有很快被使用,那麼釋放它不會有任何效果。

  2. 如果記憶體很快就被使用,那麼釋放它只是必須撤消的工作,因為必須再次使用它。

  3. 如果再次需要記憶體中的信息,釋放記憶體將意味著必須從磁碟而不是記憶體中獲取該信息,後者速度要慢得多。

現代作業系統只有在別無選擇的情況下才會釋放記憶體。如果您在想:“我現在想要釋放該內存,以便以後可以使用它”,請停下來。您不需要現在釋放記憶體以便稍後使用。這裡沒有權衡,在需要時保持記憶體使用是純粹的勝利。

答案3

記錄 top 的輸出以供將來分析是回答您的問題的最佳方式。沒有快速解決辦法,需要隨著時間的推移進行一些觀察調查。我用來瀏覽正在使用我的記憶體的內容的一次性方法是將其放入 root 的 crontab 中。

/bin/bash top -b -n 1 | head > `/var/log/date +%e_%T`

然後我使用一些文字操作和尋呼機來追蹤趨勢。這個堆疊溢位帖子https://stackoverflow.com/questions/7908953/how-to-measure-cpu-usage有一些像這樣使用 top 的更全面的示例,以及通過 自定義 top via.toprc來獲取 CPU 統計信息,但它也可以輕鬆地進行調整以滿足您的需求。

相關內容