由于可用 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 版本。