内存缓存已满,不确定是什么在使用它以及是否正常

内存缓存已满,不确定是什么在使用它以及是否正常

情况是,亚马逊机器人从我的服务器上下载了约 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 的问题还是其他问题。

相关内容