Alta utilização de swap no servidor CentOS com bastante RAM extra

1

Temos uma frota de servidores de hospedagem na Web, todos executando exatamente o mesmo software & hardware com carga semelhante.

Um dos nossos servidores recebe uma carga muito alta, o que leva a um bloqueio por breves períodos de tempo. A principal diferença para este servidor parece ser o uso de swap muito alto, mesmo com muita RAM livre & swappiness definido para 30:

# cat /proc/sys/vm/swappiness
30

# free -m
              total        used        free      shared  buff/cache   available
Mem:          40074        8277        6352         548       25444       29412
Swap:         24575        5814       18761

Top mostra o uso de memória semelhante e uma ideia de carga ociosa:

# top
    Tasks: 529 total,   6 running, 520 sleeping,   0 stopped,   3 zombie
%Cpu(s): 51.1 us, 11.8 sy,  0.0 ni, 35.2 id,  1.6 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem : 41035828 total,  6511476 free,  8697564 used, 25826788 buff/cache
KiB Swap: 25165820 total, 19224744 free,  5941076 used. 29916408 avail Mem

A razão pela qual eu acho que pode haver um problema é devido ao vmstat mostrar alto uso de swap

    # vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free    buff    cache   si    so   bi    bo   in   cs   us sy id wa st
10  0 5856556 4559436 724880 26904888 3072   20 26392  1624 30378 10346 30 22 40  4  5
12  1 5856444 4646072 725168 26902376 5344   80 19344  5548 25937 8049 18 30 45  4  4
17  0 5856608 4668964 717648 26875160 4772  164 17316  3300 31929 7187 19 53 19  5  5
10  1 5856780 4752916 704900 26836828 3768  172 17748   904 30300 7699 22 59 15  2  1
 2  3 5856788 4623292 708248 26859896 4768    8 34496  1972 30090 15300 25 19 51  4  1
11  0 5856792 4726972 709364 26876620 6732    4 39812  3796 26562 12241 20 27 50  3  0
12  1 5856832 4749100 710604 26842904 9000   40 19136  1128 26507 9283 25 41 32  2  0
 4  0 5856504 4859128 712020 26826680 7516  172 23524  2580 24394 10530 19 37 41  3  0
11  1 5856372 4791056 709808 26828772 11136    8 23860  2264 19609 12320 13 22 61  4  0
 7  0 5856372 4634432 713320 26852572 8744    0 37992  1028 23425 12326 18 21 56  4  0
 8  1 5856368 4530268 715848 26854832 5592    0 26272  2996 34327 14391 24 23 49  3  1
 7  0 5856376 4611928 714176 26902960 7044    8 45588  2984 32832 10172 26 25 45  3  0
11  0 5856408 4645736 712716 26914004 8164   32 19692  7160 23702 16326 21 21 54  2  1
 8  0 5856412 4658252 715648 26907004 6608    8 28260  1608 31679 10715 23 19 54  3  1
 7  0 5855264 4495904 718876 26929968 6288    0 31232   968 23048 9080 24 11 59  5  0
 4  0 5853560 4796052 719268 26938096 2148    0 18764  1556 21659 8297 15 14 69  2  0
 4  2 5852116 4692844 720656 26952300 2212    0 16764   636 18181 10162 18  9 71  2  0
 9  0 5850960 4566112 720756 26977948 3120    0 33116  5136 24373 7915 23 12 64  1  0
 9  0 5850316 4626320 721260 26962468 2400  148 13988   484 24208 6748 21 34 43  1  0

Temos outro servidor que é provavelmente o mais próximo dele em termos de carga e número de usuários, ambos possuem hardware e software idênticos, e o outro servidor ainda tem mais usuários e geralmente maior uso de CPU, embora apenas com dificuldade. Consistentemente usa significativamente menos swap, é livre -m & vmstat se parece com:

other# free -m
              total        used        free      shared  buff/cache   available
Mem:          40073        9471        4376        2408       26226       27210
Swap:         28671        3490       25181


other# vmstat 1
10  0 3564112 4904700 1227052 25172336    0   44 19672   896 23057 3955 23 16 61  0  0
 3  0 3564148 4837896 1226772 25168380    0   36  3080 15000 29370 4467 19 15 65  1  0
 9  0 3564204 4829296 1226612 25222808    0   56 46632  2100 16596 5268 11 15 73  1  0
 5  0 3564248 4663528 1226424 25328292    0   44 95104  1072 34862 6531 25 15 59  1  0
 6  1 3564296 4566072 1226924 25390092    0   48 55632  2056 35307 12050 15 16 68  2  0
 4  0 3564332 4496940 1226620 25391812    0   36  5772  1364 37957 4805 18 15 67  1  0
 5  0 3564348 4651396 1226552 25388820    0   16  2160  2004 14545 3504 12 11 76  0  0
 4  0 3564368 4809568 1225696 25331324    0   20  1524   700 11572 2997  7 10 83  0  0
 3  0 3564404 4802060 1223488 25328372    0   44  2160  2328 21654 11113 14 14 72  0  0
 3  0 3563960 4831720 1220844 25285840  296   16  1304  2120 16522 4083 11 11 77  0  0
 5  0 3563972 4805272 1217784 25289068    0   12  6920  1060 22775 4271 17 12 71  0  0
 3  0 3563980 4758120 1214556 25293184    0    8  5560  7896 30875 5421 22 13 63  0  1
 4  0 3563988 4687848 1211544 25293100   28    8  3288   828 24343 4136 16 12 71  0  0
 7  0 3564040 4474796 1204748 25299556    0   52  7908  1608 37724 6343 23 17 58  1  1
 3  0 3564072 4507772 1201608 25324032    0   32 26724  2536 33578 7815 22 16 61  1  0
 6  0 3564076 4709044 1198596 25327624    8    8  7016   928 29711 5099 19 13 67  1  0

Ao visualizar em cima, ele mostra o systemd usando aproximadamente 968 GB de disco lidos por dia, em que o outro servidor usa cerca de 520 GB de disco lidos por dia. Eu estou atribuindo isso para swap, mas iria trocar aparecer sob esse stat?

Eu sei que esse servidor está em desempenho comparado com os outros, além disso, os bloqueios parecem estar relacionados, embora sejam difíceis de distinguir, pois quando ele trava não conseguimos entrar e nosso registro também falha.
O que eu estava esperando é uma maneira de descobrir por que esse servidor está usando muito o swap.

EDIT: Adicionada uma imagem do Atop para mostrar Page Scan / stall & Trocar em Trocar Em cima mostrando a varredura de página

    
por Kyle Vail 10.04.2018 / 01:23

2 respostas

0

Primeiro, você quase certamente não está trocando aqui - você está paginando. A paginação é um processo diferente que usa o mesmo armazenamento que o swap, mas é proativo ao invés de puramente reativo às condições de memória.

Se você estiver vendo mais paging, isso será devido à sua carga de trabalho em relação ao seu conjunto de hardware. Monitorar suas operações de carga de trabalho por segundo (ou uma métrica semelhante) revelará quaisquer inconsistências. Dependendo de como o balanceamento de carga funciona, você pode ter um cliente "fixo" que exige alta carga nesse servidor específico - mas isso é apenas conjectura.

Em segundo lugar, se todos esses servidores tiverem o mesmo perfil de hardware, você deverá esperar que eles sejam executados quase idênticos sob o mesmo carregamento. Se sua carga for realmente balanceada, a execução de alguns diagnósticos de hardware seria prudente. Concentre-se primeiro no disco e na E / S da rede, pois um disco ou NIC com falhas mínimas empurrará a média de carga e o uso de memória associado para cima à medida que o hardware ocupar seu tempo nas tentativas, etc.

Apesar de seus dados serem exibidos, isso é muito amplo, por isso é difícil responder com precisão. A publicação dos resultados da carga de trabalho e das informações de diagnóstico de hardware ajudaria a fornecer uma resposta mais concreta, se não for possível responder à pergunta em si.

    
por 10.04.2018 / 05:18
1

Eu vi algo semelhante em um servidor físico em que os desenvolvedores usavam a unidade interna para o SO & dados. Pelo que eu me lembro, nós tínhamos um disco raiz intermitentemente sobrecarregado (onde swap vivia) + um cache de buffer normalmente cheio, então algo entra e precisa alocar alguma memória.

Parece que ou a troca era necessária para liberar as páginas de cache do buffer, ou então os arquivos, que estavam no mesmo dispositivo, precisavam ser tocados ... já que não conseguia se livrar das páginas de memória com rapidez suficiente, Eu acho que começou a trocar as coisas causando um ciclo vicioso ... Eu não tenho números para fazer isso, mas na minha experiência o drop-off quando você excede o IOPS provisionado é muito mais abrupto do que apenas sobrecarregar uma fiação conectada localmente disco ... olhe atentamente para o IO no dispositivo onde o swap está.     
por 10.04.2018 / 04:41