无法解释的高内存使用率

无法解释的高内存使用率

由于可用 RAM 不足,我的服务器开始无法生成 PHP 实例来响应 HTTP 请求。Free -m 显示剩余内存量合理,但 top 和 PS 似乎无法解释为什么使用了这么多内存。

据推测它无法产生进程,因为服务器是具有 1gb 内存和 2gb“突发”的 VPS。

我是否忽略了什么?

   $ free -m
                 total       used       free     shared    buffers     cached
    Mem:          2048       1117        930          0          0          0
    -/+ buffers/cache:       1117        930
    Swap:            0       0          0

按内存百分比排序

$ top
top - 16:13:49 up 82 days, 13 min,  1 user,  load average: 0.00, 0.12, 0.09
Tasks:  46 total,   1 running,  45 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2097152k total,  1144832k used,   952320k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1236 root      10 -10 22516  21m 1728 S  0.0  1.1   0:00.00 iscsiuio
32003 mysql     18   0  129m  20m 4876 S  0.0  1.0   8:52.62 mysqld
16111 pez       18   0 24776  17m 4108 S  0.0  0.8   4:41.36 irssi
16226 root      18   0 13536 9.9m 1556 S  0.0  0.5   0:00.04 lfd
12273 apache    17   0  283m 5184 2156 S  0.0  0.2   0:00.06 httpd
12261 root      20   0  8812 5132 1936 S  0.0  0.2   0:00.12 ruby
12250 root      15   0 13488 5072 2860 S  0.0  0.2   0:00.04 httpd
12272 apache    18   0  284m 4996 2076 S  0.0  0.2   0:00.02 httpd
12271 apache    18   0  283m 4592 2064 S  0.0  0.2   0:00.00 httpd
 3103 named     20   0 70916 4556 2084 S  0.0  0.2   0:05.78 named
12264 nobody    18   0  7876 2708 2304 S  0.0  0.1   0:00.00 PassengerLoggin
18031 root      18   0  9888 2680 2188 S  0.0  0.1   0:00.09 sshd
 1841 ftp       18   0  8760 2596 1648 S  0.0  0.1   1:01.63 proftpd
16055 pez       15   0  4384 2332 1400 S  0.0  0.1   0:00.05 bash
22372 games     15   0  4512 2324 1392 S  0.0  0.1   0:00.05 bash
25652 games     15   0  4512 2324 1392 S  0.0  0.1   0:00.06 bash

PS 按内存使用情况排序:

root:~$ ps aux --sort -rss | head
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1236  0.0  1.0  22516 22508 ?        S<Lsl Mar24   0:00 iscsiuio
mysql    32003  0.0  1.0 132768 21464 ?        Sl   May20   8:52 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --log-error=/var/lib/mysql/mysql-bin.err --pid-file=/var/lib/mysql/tent.pegproductions.com.pid
pez      16111  0.0  0.8  24776 17816 pts/4    S+   May26   4:41 irssi
507      18171 22.7  0.8  65832 17392 ?        Sl   16:15   0:20 ./ts3server_linux_x86
root     16226  0.0  0.4  13536 10120 ?        Ss   16:07   0:00 lfd - sleeping
apache   12273  0.0  0.2 290804  5184 ?        Sl   16:03   0:00 /usr/sbin/httpd -k start -DSSL
root     12261  0.0  0.2   8812  5132 ?        Sl   16:03   0:00 Passenger spawn server
root     12250  0.0  0.2  13488  5072 ?        Ss   16:03   0:00 /usr/sbin/httpd -k start -DSSL
apache   12272  0.0  0.2 291636  4996 ?        Sl   16:03   0:00 /usr/sbin/httpd -k start -DSSL

答案1

坦率地说,您只能获得 VPS 承诺的 1 GB,而另外 1 GB“可突发”,它是共享池的一部分,仅当第一个 1 GB 被充分利用且共享内存池有内存可供您的 VPS 使用时,才会发生这种情况,然后只有突发才会起作用,这意味着没有任何保证。

至于是否有 1 GB 专用内存可用,答案是肯定的。试着从顶部输出中数出大内存。

32003 mysql     18   0  129m  20m 4876 S  0.0  1.0   8:52.62 mysqld
12273 apache    17   0  283m 5184 2156 S  0.0  0.2   0:00.06 httpd
12272 apache    18   0  284m 4996 2076 S  0.0  0.2   0:00.02 httpd
12271 apache    18   0  283m 4592 2064 S  0.0  0.2   0:00.00 httpd

答案2

只是一个想法,可能不是操作系统内存,但可能是 PHP 对内存使用的限制。在您的php.ini文件中查找参数memory_limit。如果未定义,则可能默认为 8M、32M 或 128M,具体取决于您使用的 PHP 版本。

http://php.net/manual/en/ini.core.php#ini.memory-limit

相关内容