Почему мой сервер использует только 3 ГБ памяти?

Почему мой сервер использует только 3 ГБ памяти?

На сервере 24 ГБ памяти и 4 четырехъядерных процессора. Он запускает загруженный веб-сайт на apache/MySQL/php и иногда выдает сообщение о том, что нагрузка на сервер слишком высока. Когда я смотрю логи, он никогда не использует больше 3 ГБ памяти, что тоже кажется мне странным. Это может быть настройка 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 ГБ. Но когда я смотрю на 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

Значение memory_limit для PHP составляет 128 МБ.

Я вижу этот предел в 3 ГБ в нескольких ситуациях. Fi Htop, top и когда я вхожу в Webmin в статусе сервера. (да, я использую Webmin, так как много управляю со своего iPad ;))

Я попробую добавить скриншот сюда...

решение1

Вы используете 20951 из 24153. Приложения не запрашивают больше 3092, поэтому ядро ​​использует остаток для кэша и буферов. Поскольку вашим приложениям требуется больше памяти, ядро ​​уменьшит кэш, чтобы удовлетворить новые требования приложений.

Настройка конфигурации MySQL и Apache для оптимальной производительности зависит от приложения. В некоторых случаях, например, для статических веб-сайтов, большой кэш файловой системы — это здорово. Однако динамический сайт с интенсивным взаимодействием с базой данных выиграет от нескольких изменений в конфигурации MySQL по умолчанию.

У Percona есть отличный инструмент, который поможет вам начать работу с конфигурацией MySQL.http://tools.percona.com/wizardПосле того, как вы разобрались с основами, вы можете внести дальнейшие изменения в соответствии со спецификой вашего приложения.

Конфигурация Apache зависит от объема трафика и размера запросов. Не зная ничего, трудно рекомендовать что-то, выходящее за рамки значений по умолчанию.

решение2

Если я прав, у вас 32-битный сервер.

32-битная версия ограничена 4 ГБ памяти, если вы не используете образ pae:

32-битный компьютер имеет размер слова 32 бита, что теоретически ограничивает память 4 ГБ. Этот барьер был расширен за счет использования «Расширения физического адреса» (или PAE), которое увеличивает предел до 64 ГБ, хотя доступ к памяти свыше 4 ГБ будет немного медленнее.

Я не могу найти, включен ли pae в образ ядра.

вы можете попробовать сделать apt-get install linux-image-generic-pae

если это так, перезагрузите компьютер и посмотрите, используете ли вы больше памяти.

ELse рассмотрите возможность установки 64-битного сервера

Связанный контент