为什么我的服务器只使用 3GB 内存

为什么我的服务器只使用 3GB 内存

该服务器有 24 GB 内存和 4 个四核 CPU。它使用 apache/MySQL/php 运行一个繁忙的网站,有时会显示服务器负载过高的消息。当我查看日志时,它使用的内存从未超过 3 GB,这对我来说似乎很奇怪。这可能是 MySQL 或 apache 设置。

这里有一些数据

uname -a
Linux s2274 2.6.32-32-server #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011 x86_64 GNU/Linux


free -m
             total       used       free     shared    buffers     cached
Mem:         24153      20951       3201          0        125      17719
-/+ buffers/cache:       3106      21046
Swap:        11240         14      11226

如您所见,这里显示使用了 20 GB。但是当我查看 top/htop 时,使用量从未超过 3092。处理器并不活跃,平均负载为 0.9。我能否以某种方式增加 apache 和/或 MySQL 使用的内存,看看它是否可以使用所有内存?


抱歉,我离开了一段时间.....这是 mysqld 命令的输出:

120108  8:48:21 [Note] Plugin 'FEDERATED' is disabled.
  --binlog_cache_size=#
  --bulk_insert_buffer_size=#
  --delayed_queue_size=#
  --join_buffer_size=#
  --key_buffer_size=# The size of the buffer used for index blocks for MyISAM
  --key_cache_block_size=#
  --max_binlog_cache_size=#
  --max_binlog_size=# Binary log will be rotated automatically when the size
                      max_relay_log_size is 0. The minimum value for this
  --max_heap_table_size=#
  --max_join_size=#   Joins that are probably going to read more than
                      max_join_size records return an error.
  --max_relay_log_size=#
                      the size exceeds max_binlog_size. 0 excepted, the minimum
  --myisam_block_size=#
  --myisam_data_pointer_size=#
  --myisam_max_extra_sort_file_size=#
  --myisam_max_sort_file_size=#
  --myisam_sort_buffer_size=#
  --preload_buffer_size=#
  --profiling_history_size=#
  --query_alloc_block_size=#
  --query_cache_size=#
  --query_prealloc_size=#
  --range_alloc_block_size=#
  --read_buffer_size=#
  --read_rnd_buffer_size=#
  --record_buffer=#   Alias for read_buffer_size
  --sort_buffer_size=#
  --thread_cache_size=#
  --tmp_table_size=#  If an internal in-memory temporary table exceeds this
  --transaction_alloc_block_size=#
--transaction_prealloc_size=#
binlog_cache_size                 32768
bulk_insert_buffer_size           8388608
delayed_queue_size                1000
join_buffer_size                  12582912
key_buffer_size                   805306368
key_cache_block_size              1024
max_binlog_cache_size             18446744073709547520
max_binlog_size                   104857600
max_heap_table_size               805306368
max_join_size                     18446744073709551615
max_relay_log_size                0
myisam_block_size                 1024
myisam_data_pointer_size          6
myisam_max_extra_sort_file_size   2147483648
myisam_max_sort_file_size         9223372036853727232
myisam_sort_buffer_size           25165824
preload_buffer_size               32768
profiling_history_size            15
query_alloc_block_size            8192
query_cache_size                  805306368
query_prealloc_size               8192
range_alloc_block_size            4096
read_buffer_size                  25165824
read_rnd_buffer_size              25165824
sort_buffer_size                  25165824
thread_cache_size                 256
tmp_table_size                    805306368
transaction_alloc_block_size      8192
transaction_prealloc_size         4096

php memory_limit 为 128M

我在几种情况下都看到了 3 GB 的限制。Fi Htop、top 以及当我在服务器状态中登录 Webmin 时。(是的,我使用 Webmin,因为我从 iPad 进行了很多管理 ;))

我将尝试在这里添加屏幕截图...

答案1

您使用了 24153 中的 20951。应用程序请求的内存不超过 3092,因此内核将其余内存用作缓存和缓冲区。当您的应用程序需要更多内存时,内核将减少缓存以满足新应用程序的要求。

调整 MySQL 和 Apache 配置以获得最佳性能取决于应用程序。在某些情况下(例如静态网站),大型文件系统缓存非常有用。但是,对于数据库交互繁重的动态网站,对默认 MySQL 配置进行一些更改会大有裨益。

Percona 有一个很好的工具可以帮助您开始 MySQL 配置。http://tools.percona.com/wizard掌握基础知识后,您可以根据应用程序的具体情况进行进一步调整。

Apache 配置取决于流量和请求的大小。如果不知道任何事情,很难推荐超出默认值的配置。

答案2

如果我没记错的话你正在运行的是 32 位服务器

除非使用 pae 映像,否则 32 位限制为 4 gb 内存:

32 位计算机的字长为 32 位,理论上内存限制为 4GB。通过使用“物理地址扩展”(PAE),这一限制得到了扩展,将限制提高到 64GB,尽管 4GB 以上的内存访问速度会略慢。

我找不到内核映像是否包含 pae。

您可以尝试执行 apt-get install linux-image-generic-pae

如果是这样,请重新启动并查看是否使用了更多的内存。

否则考虑安装 64 位服务器

相关内容