![内存缓存已满,不确定是什么在使用它以及是否正常](https://linux22.com/image/643774/%E5%86%85%E5%AD%98%E7%BC%93%E5%AD%98%E5%B7%B2%E6%BB%A1%EF%BC%8C%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%98%AF%E4%BB%80%E4%B9%88%E5%9C%A8%E4%BD%BF%E7%94%A8%E5%AE%83%E4%BB%A5%E5%8F%8A%E6%98%AF%E5%90%A6%E6%AD%A3%E5%B8%B8.png)
情况是,亚马逊机器人从我的服务器上下载了约 60 万张图片。我部署在 Apache 服务器上的 Web 应用程序速度极慢,可能是因为内存使用率达到 100%
一些统计数据:
root@407096:/home# free -m
total used free shared buffers cached
Mem: 16384 16380 3 7 0 16149
-/+ buffers/cache: 231 16152
Swap: 8192 122 8069
root@407096:/home# top
top - 16:18:29 up 21:04, 2 users, load average: 0.13, 0.32, 0.33
Tasks: 44 total, 1 running, 42 sleeping, 1 stopped, 0 zombie
%Cpu(s): 1.2 us, 0.9 sy, 0.0 ni, 97.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 16777216 total, 16774160 used, 3056 free, 0 buffers
KiB Swap: 8388608 total, 125904 used, 8262704 free. 16535440 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13710 www-data 21 1 2223944 36712 4996 S 12.3 0.2 116:39.27 apache2
14420 www-data 20 0 645668 12780 3000 S 1.3 0.1 63:23.26 apache2
13798 www-data 20 0 774092 11276 3004 S 1.7 0.1 63:36.86 apache2
13883 www-data 20 0 840732 11160 3004 S 1.0 0.1 63:19.59 apache2
14511 www-data 20 0 510772 9976 3004 S 1.3 0.1 62:05.79 apache2
2402 root 20 0 565640 8196 4392 S 0.3 0.0 6:30.79 python
631 mysql 20 0 644352 6836 4576 S 0.0 0.0 0:48.47 mysqld
20680 root 20 0 89564 3656 2780 S 0.0 0.0 0:00.00 sshd
1168 root 20 0 60512 3228 1840 S 0.0 0.0 0:15.22 supervisord
17856 root 20 0 90912 3176 3048 S 0.0 0.0 0:00.55 sshd
20295 root 20 0 90912 3164 3044 S 0.0 0.0 0:00.06 sshd
11353 root 20 0 88420 2676 2332 S 0.0 0.0 0:04.31 apache2
468 root 20 0 61316 2508 2400 S 0.0 0.0 0:02.32 sshd
14985 postfix 20 0 40120 2484 2360 S 0.0 0.0 0:00.00 tlsmgr
20469 root 20 0 18392 2284 1556 S 0.0 0.0 0:00.05 bash
20457 root 20 0 39244 2112 1036 S 0.0 0.0 0:00.38 redis-server
17870 root 20 0 18296 1968 1588 S 0.0 0.0 0:00.22 bash
1 root 20 0 33312 1936 1368 S 0.0 0.0 0:00.83 init
20467 root 20 0 40808 1804 1428 S 0.0 0.0 0:00.00 sudo
20681 sshd 20 0 62736 1532 772 S 0.0 0.0 0:00.00 sshd
20307 root 20 0 18276 1528 1528 S 0.0 0.0 0:00.02 bash
389 syslog 20 0 184192 1524 968 S 0.0 0.0 0:02.53 rsyslogd
20665 root 20 0 19828 1460 1080 R 0.0 0.0 0:00.03 top
666 postfix 20 0 27412 1444 1356 S 0.0 0.0 0:00.04 qmgr
1143 root 20 0 83552 372 372 S 0.0 0.0 0:00.00 saslauthd
1144 root 20 0 83552 24 24 S 0.0 0.0 0:00.00 saslauthd
1168 root 20 0 60512 3228 1840 S 0.0 0.0 0:15.21 supervisord
我不确定是什么占用了缓存。 Apache 是否可能使用缓存下载图像,因此托管在同一个 Apache 上的 Web 应用程序会延迟?
答案1
cached
是一个显示存储在 RAM 中的数据量的值,RAM 是文件系统级缓存。它的工作方式是先从缓存读取/写入数据,然后再转储到磁盘。常用数据也会保留下来,以便更快地进行读取访问(例如共享对象文件等)。这大大提高了 I/O 性能,并且是 Linux 内核中的一项功能。这种使用是优先的,因此如果应用程序请求更多 RAM,则会释放缓存以腾出空间。考虑到这一点,缓存不会造成您的问题。
以下仅是猜测,并没有显著的证据证明这一点,这只是基于过去的经验。
亚马逊的 CPU 比其他服务器/VPS 稍慢。我已经用几个基本应用程序和脚本粗略地证明了这一点,这些应用程序和脚本除了在给定时间内在 while 循环中增加计数器外什么都不做。与专用机器和其他 VPS 相比,AWS 实例始终表现不佳。这可能是由于 EC2 的共享平台性质(其他实例与您的实例在同一物理主机上运行)。您的应用程序在 EC2 上的表现是否始终不佳,但在您的开发环境中运行良好?每月 5 美元,您可以尝试在 DigitalOcean VPS 上运行它,看看是 EC2 的问题还是其他问题。