Я использовал документацию из PostgreSQL, чтобы установить, например, этот конфиг:
>>> cat /proc/meminfo
MemTotal: 16345480 kB
MemFree: 1770128 kB
Buffers: 382184 kB
Cached: 10432632 kB
SwapCached: 0 kB
Active: 9228324 kB
Inactive: 4621264 kB
Active(anon): 7019996 kB
Inactive(anon): 548528 kB
Active(file): 2208328 kB
Inactive(file): 4072736 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 3432 kB
Writeback: 0 kB
AnonPages: 3034588 kB
Mapped: 4243720 kB
Shmem: 4533752 kB
Slab: 481728 kB
SReclaimable: 440712 kB
SUnreclaim: 41016 kB
KernelStack: 1776 kB
PageTables: 39208 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 8172740 kB
Committed_AS: 14935216 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 399340 kB
VmallocChunk: 34359334908 kB
HardwareCorrupted: 0 kB
AnonHugePages: 456704 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 12288 kB
DirectMap2M: 16680960 kB
>>> ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 4316816
max total shared memory (kbytes) = 4316816
min seg size (bytes) = 1
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
------ Messages Limits --------
max queues system wide = 31918
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384
выдержка sysctl.conf , рассчитанная мной:
kernel.shmall = 1079204
kernel.shmmax = 4420419584
postgresql.conf не по умолчанию , рассчитанный мной:
max_connections = 60 # (change requires restart)
shared_buffers = 4GB # min 128kB
work_mem = 4MB # min 64kB
wal_sync_method = open_sync # the default is the first option
checkpoint_segments = 16 # in logfile segments, min 1, 16MB each
checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0
effective_cache_size = 6GB
Это уместно? Если нет (или не обязательно), в каком случае это будет уместно?
Мы отметили хорошие улучшения производительности с этим конфигом, как бы вы его улучшили?
Как рассчитать параметры управления памятью ядра?
Кто-нибудь может объяснить, как действительно установить их с нуля?
Ответы:
Я ответил на другой вопрос здесь:
Git не может нажать с ошибкой «из памяти»
Я не отвечаю на все ваши вопросы здесь, но вопрос в вашем названии:
В некоторых дистрибутивах ядра есть настройки, которые не позволяют ядру выделять максимальный объем памяти одному процессу:
Установить параметры ядра
Измените
/etc/sysctl.conf
файл, включив в него строки, соответствующие вашей операционной системе:Если ваш процесс превысит пределы, ядро убьет процесс, несмотря на то, что в вашей системе зарегистрировано максимальное количество памяти.
Примечание: будьте осторожны с этими настройками. Вы, вероятно, не хотите использовать настройки в этом примере, так как я извлек их с сервера в нашей среде.
Несколько дополнительных примечаний для упоминания:
Чтобы обновить и протестировать настройки ядра с помощью sysctl, используйте следующие команды:
Список текущих настроек:
Отключите безопасный linux, отредактировав
/etc/selinux/config
файл, убедившись, что флаг SELINUX установлен следующим образом.Настройки ядра обычно более строго определены в средах центра обработки данных, когда поставщики услуг Интернета не хотят, чтобы один процесс клиента занимал все ресурсы на общем сервере.
Обычно вам не нужно устанавливать параметры памяти ядра, если у вас нет процесса, который убивает ядро из-за нехватки ресурсов.
В некоторых случаях postgres также может выделять больше памяти для определенных размеров страниц, чем доступно в общей памяти:
Ошибки, такие как в примере выше, могут быть устранены путем настройки параметров ресурсов ядра. Рекомендованные настройки и методы для определения настроек ресурса подробно описаны здесь:
http://www.postgresql.org/docs/9.1/static/kernel-resources.html
Однако вам не нужно трогать эти настройки, если только вы не столкнулись с ситуациями нехватки ресурсов, связанными с процессом postgres. Эти ситуации чаще всего встречаются в общих средах или на серверах с ограниченными ресурсами, выделенными для них.
Что касается настройки Postgres, вы должны прочитать это:
http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
источник
Ой!! Я нахожу замечательный инструмент для расчета конфигурации config нашего сервера postgresql.
http://pgtune.leopard.in.ua/
источник
Эти конфигурации ядра являются глобальными, а не специфичными для процесса, поэтому целесообразно установить их в
sysctl.conf
.источник
Ну, это зависит от того, что еще работает на сервере, если это чистый сервер PostgreSQL, то PostgreSQL - правильное место для поиска этих настроек.
Если вы работаете с другими приложениями / службами, у которых есть определенные потребности в памяти, вам нужно будет найти оптимальную настройку между этими различными приложениями.
Если вы видите увеличение производительности в базе данных и отсутствие потери производительности в других приложениях, я бы не беспокоился об этом.
Как правило, базы данных наиболее чувствительны к настройкам памяти, поскольку они также, скорее всего, являются узким местом в производительности приложений, поэтому имеет смысл оптимизировать систему для работы с БД.
источник