14

サーバーの 1 つで、いくつかのメモリ/ディスク KV サービスがあり、メモリ KV は memcached のように動作し、初期化時に大きなメモリ (10GB) のトランクを要求します。多くのファイルを読み取ります。メモリはすべて libc malloc を使用して割り当てられます。

KV サーバー プロセスは、以下のように多くのメモリを消費しません (メモリ不足のため、メモリ KV を強制終了し、ディスク KV だけを残しましたが、空きメモリはまだ減少しています)。

:~$top
PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20 0 5030m 3.9g 2772 S 8 6.1 10430:52 tair_server
20 0 4833m 3.9g 4560 S 8 6.1 10171:07 tair_server
20 0 4844m 3.9g 3844 S 38 6.1 10073:32 tair_server
20 0 4765m 3.8g 4144 S 8 6.0 10552:39 tair_server
20 0 2941m 2.4g 9.8m S 0 3.8 256:45.70 tair_server
20 0 2953m 2.4g 12m S 1 3.7 276:54.64 tair_server

でも、私の記憶はなくなっています。

$free -m

             total       used       free     shared    buffers     cached
Mem:         64552      57778       6774          0         16        326
-/+ buffers/cache:      57435       7117
Swap:            0          0          0

スラブが大量のメモリを消費していることがわかりますが、それは再利用できません。

$cat /proc/meminfo
MemTotal:       66101892 kB
MemFree:         6816228 kB
Buffers:           17024 kB
Cached:           456640 kB
SwapCached:            0 kB
Active:         19697712 kB
Inactive:        3197312 kB
Active(anon):   19546504 kB
Inactive(anon):  2875632 kB
Active(file):     151208 kB
Inactive(file):   321680 kB
Unevictable:          48 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:              6612 kB
Writeback:            72 kB
AnonPages:      22421152 kB
Mapped:            54408 kB
Shmem:               332 kB
Slab:           28870400 kB
SReclaimable:     213344 kB
SUnreclaim:     28657056 kB
KernelStack:       30000 kB
PageTables:        62776 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    33050944 kB
Committed_AS:   37517224 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      388624 kB
VmallocChunk:   34324313700 kB
HardwareCorrupted:     0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:        5696 kB
DirectMap2M:     2082816 kB
DirectMap1G:    65011712 kB

板情報はこちら。

$slabtop -s c

OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME  
69842766 69838389  38%    0.19K 1663025       42  13304200K kmalloc-192
69314912 69314796  38%    0.12K 2166091       32   8664364K kmalloc-128
70866624 70866323  39%    0.06K 1107291       64   4429164K kmalloc-64
69299968 69299592  38%    0.03K 541406      128   2165624K kmalloc-32
128388  72434  56%    0.99K   4230       32    135360K ext4_inode_cache
208782  94112  45%    0.19K   4971       42     39768K dentry

何が大量のメモリを消費するのか、なぜそうするのか、そしてこれを解決する方法がわかりません。

これはインターバル カーネル エラーでしょうか?

または、それは glibc の問題です。頻繁にディスクが読み取られるため、メモリがシステムに戻されませんか?

4

2 に答える 2

1

ディストリビューションのバージョンが少し古いようですが、問題ありません。unmae -a出力を表示する前にアップグレードする必要があると言う人に耳を傾けないでください。でも、供給してくれると良いのですが…

サーバーおよびデスクトップ ディストリビューションの新しいバージョンでは、無料のコマンド出力と には、/proc/meminfoまさにこの種の混乱を排除する目的でもう 1 行が含まれています。/proc/meminfo行名は、出力では「MemAvailable」 、free出力では「available」です。

の「空き」列free -mは、人間が理解できる方法で空きメモリを示していません (したがって、の「MemFree」行/proc/meminfo)。人間がそれを理解する方法で「使用」されていないカーネルのページキャッシュやその他のキャッシュを除外するものではありません。

それが最初のことです。私が間違っていると思い、free出力を正しく理解している場合は、次を試してくださいecho 3 > /proc/sys/vm/drop_caches。メモリ使用量で何が起こるかを確認してください。freeそのコマンドをルートとして実行した後の出力を提供してください。

それでも問題が解決しない場合は、https ://www.linuxquestions.org/questions/linux-server-73/very-high-slab-usage-hard-to-understand-901323/ をお読みください。カーネルをアップグレードする必要があるかもしれないと言われています。

于 2020-10-30T10:31:10.050 に答える
-3

top 、 free 、 slabtop の抜粋とともに提供

カーネルがメモリ Slab を使い果たしているようです: 28870400 kB

これを見つける非常にナイスな方法は .

  1. Top を実行し、RES メモリ (RAM 上の常駐メモリ) の合計を実行します。

  2. free -m を実行して、空きメモリと使用中のメモリの量を確認します (free given kernel + user )。合計メモリ - 上位 RES と、 FREE コマンドで空きとして宣言されているものとの差は、1 GB ほどではないはずです。

「OS のバージョンを上げる時が来ました」

于 2015-04-30T12:35:18.193 に答える