Estou voltando aqui para responder minha própria pergunta!
O problema é causado quando você tem vários cpus (não multi-core), por exemplo, 2 CPUs cada com x núcleos
vm.zone_reclaim_mode = 0
corrige isso.
Eu tenho vários servidores Linux de alta memória rodando o centos 64bit, e depois de 10-20 dias de tempo de atividade eu notei que em todos esses servidores eles realmente não usam todo o RAM disponível (todos eles tem cerca de 10gb livres em um sistema de 48gb e 20gb livres em sistemas de 64gb.
Eles são servidores da Web e têm um conjunto de dados de trabalho (por exemplo, arquivos ativos) acima da quantidade de memória RAM no servidor, então eu teria assumido que o cache de páginas cresceria a ponto de usar todos os RAM e as páginas do O cache da página seria liberado quando / se necessário.
por exemplo:
top - 09:44:46 up 57 days, 9:32, 5 users, load average: 6.44, 6.33, 6.27
Tasks: 680 total, 4 running, 676 sleeping, 0 stopped, 0 zombie
Cpu(s): 17.3%us, 3.3%sy, 0.0%ni, 79.0%id, 0.1%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 49313212k total, 39277524k used, 10035688k free, 1247064k buffers
Swap: 20643832k total, 0k used, 20643832k free, 20592968k cached
mostra que este servidor está ativo há 57 dias, no entanto, tem 10GB de RAM livre que deve ser usado no cache de páginas.
Os seguintes sysctl são definidos a partir do estoque centos:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.conf.all.log_martians = 1
error: "kernel.maps_protect" is an unknown key
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_max_syn_backlog = 4096
net.core.netdev_max_backlog = 20000
vm.min_free_kbytes = 85536
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_syn_backlog = 6000
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_fin_timeout = 40
net.ipv4.tcp_keepalive_time = 1000
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_intvl = 30
net.netfilter.nf_conntrack_tcp_timeout_established = 2000
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
kernel.panic = 40
fs.proc_can_see_other_uid = 0
net.ipv4.ipfrag_secret_interval = 6000
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_max_tw_buckets_ub = 720000
net.core.optmem_max = 25165824
fs.proc_can_see_other_uid = 0
fs.proc_super_gid = 32010
vm.swappiness = 2
fs.file-max = 400000
fs.suid_dumpable = 1
kernel.msgmni = 1024
kernel.sem = 250 256000 32 1024
iv tentei alterar agora um para muitos sysctl's! , e espero que algum tipo de alma já tenha visto isso antes, obrigado antecipadamente por qualquer ajuda.
Estou voltando aqui para responder minha própria pergunta!
O problema é causado quando você tem vários cpus (não multi-core), por exemplo, 2 CPUs cada com x núcleos
vm.zone_reclaim_mode = 0
corrige isso.
Não tenho certeza se há algum problema aqui. Você está tendo outros problemas, como alta taxa de entrada e saída de disco?
A maioria dos softwares não é projetada para consumir toda a memória apenas porque pode. Você não menciona qual software de servidor da Web está usando, mas a maioria dos softwares de servidor da Web terá algoritmos internos projetados para liberar objetos do cache, caso eles não sejam solicitados com a frequência necessária. Eles também têm mecanismos configuráveis projetados para controlar a quantidade de recursos que eles consomem no servidor.
Supondo que você esteja usando o Apache, a seção de ajuste de desempenho da documentação do Apache tem uma seção sobre ajuste de MaxRequestWorkers:
You can, and should, control the MaxRequestWorkers setting so that your server does not spawn so many children it starts swapping. This procedure for doing this is simple: determine the size of your average Apache process, by looking at your process list via a tool such as top, and divide this into your total available memory, leaving some room for other processes.
Se você estiver usando o Apache e se tiver feito isso, é provável que você não tenha solicitações suficientes para o Apache justificar a manutenção de todos esses trabalhadores. Também pode ser que sua estimativa do número de trabalhadores seja muito baixa e você poderia aumentar o MaxRequestWorkers para tentar fazer com que o Apache gerasse mais trabalhadores.
A menos que você esteja enfrentando algum outro problema, não parece que algo está errado. Mas, em qualquer caso, esta é provavelmente uma questão / problema de configuração do software do servidor web e não um sysctl.
Qualquer RAM não usada para programas é usada como um cache de disco. Então, em teoria, toda a RAM é usada. Uma ótima explicação está aqui: link
Tags memory linux centos virtual-memory