Implementar e testar corretamente as limitações de recursos para o Apache / NGINX

1

Estou encarregado da tarefa de limitar os recursos (Uso máximo de memória e peso da CPU) para Apache2 e nginx de acordo com as estatísticas de uso, e teste essa limitação.

Para limitações de recursos, escolhi o caminho mais fácil - para implementá-lo através do controle de recursos do systemd, executando apache2 & nginx em uma fatia limitada personalizada:

limiter.slice :

[Unit]
Description=Resource limiting test
Before=slices.target

[Slice]
CPUWeight=50
MemoryMax=800M

[Install]
WantedBy=multi-user.target

E, é claro, adicionamos a opção Slice=limiter.slice ao apache2 & arquivos de serviço nginx.

Agora, o nginx e o apache2 iniciam corretamente na fatia limitada (verificada com systemctl status limiter.slice ):

● limiter.slice - Resource limiting test
   Loaded: loaded (/etc/systemd/system/limiter.slice; enabled; vendor preset: enabled)
   Active: active since Wed 2018-07-18 16:07:59 EEST; 3s ago
    Tasks: 58
   Memory: 8.1M (max: 800.0M)
      CPU: 82ms
   CGroup: /limiter.slice
           ├─apache2.service
           │ ├─1823 /usr/sbin/apache2 -k start
           │ ├─1841 /usr/sbin/apache2 -k start
           │ └─1843 /usr/sbin/apache2 -k start
           └─nginx.service
             ├─1805 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─1808 nginx: worker process
             └─1811 nginx: worker process

Eu acredito que a limitação de recursos deve funcionar. No entanto, eu não tenho acesso a nenhum servidor apache / nginx muito usado, então não consigo nem chegar perto, até mesmo fazer com que o apache2 / nginx use muita RAM. E a minha tarefa é mostrar o que acontece quando o Apache2 / Nginx começa a usar tanta memória, e tem que ser realista , tem que ter muita RAM, e eles quero que eu mostre esses servidores da Web que funcionam com quase o mesmo uso de RAM. Você pode ignorar o peso da CPU, pois não é meu foco principal.

Então, em outras palavras, eu preciso aumentar / aumentar o uso de RAM desses servidores.

  1. A maneira como estou tentando limitar o uso de recursos é uma boa prática (via systemd slice resource-control)?
  2. Como aumentar o Apache & Uso de memória dos servidores Nginx (para cerca de 800M de RAM, se possível ainda maior)?

Minha máquina tem 6G de RAM, estou bem com o uso de 2-3G de RAM para casos de teste.
Executando Linux Debian 9.4 .
Versão do Apache2:
Server version: Apache/2.4.25 (Debian)
Versão Nginx:
nginx version: nginx/1.10.3

Observação: o servidor da web Apache2 é o foco principal, fazer o mesmo para o Nginx não é necessário, é apenas um bônus para pesquisa.

Eu tentei encontrar maneiras de avaliar o uso de RAM, mas falhei. Tenha em mente que estou fazendo isso em uma estação de trabalho normal, portanto, não há uma maneira fácil de implantar aplicativos nos servidores da Web e gerar tráfego suficiente naturalmente para obter um aumento no uso de memória.

Atualizar : Consegui que o apache + nginx consumisse até 400-500MB de RAM usando benchmarks pesados de ab o tempo todo. No entanto, ainda não posso testar para ver se eles conseguiriam atingir o limite de 800MB de RAM especificado. Qualquer sugestão seria apreciada.

    
por Fanatique 18.07.2018 / 15:02

2 respostas

0

Uma maneira de aumentar a utilização de recursos do Apache é usar módulos adicionais. O PHP vem à mente como uma maneira fácil de aumentar os requisitos de memória.

Se você não quiser usar módulos adicionais, o aumento da memória pode, por exemplo, ser causado por POST (upload) arquivos grandes (dependendo da configuração) ou manter solicitações HTTP em vôo (não terminar a solicitação, ter clientes lentos no modo proxy, ...).

O teste geralmente não é muito fácil, pois requer recursos adicionais e scripts / ferramentas específicos de casos de uso nos clientes de teste.

    
por 03.08.2018 / 14:28
0

Se tudo o que você está fazendo é solicitações HTTP atendidas com conteúdo estático, a única maneira de aumentar a memória é aumentar a simultaneidade das conexões durante o teste. Não sei qual é o seu caso de uso, mas se tudo o que você está tentando fazer é aumentar o uso de memória, talvez seja necessário usar mod_session para que o apache salve algum servidor de dados da sessão. Isso aumentará a duração e a quantidade de memória consumida / conexão do lado do servidor. Isso não pode, no entanto, corresponder ao seu uso no mundo real. O uso de memória realmente depende de como o servidor está sendo usado e da arquitetura de sua solução geral. O conteúdo veiculado no teste corresponde ao conteúdo que será veiculado na produção? Caso contrário, você não obterá resultados precisos e suas restrições poderão não ser adequadas ao seu ambiente. Para obter resultados precisos, você precisará testar cenários típicos de uso para sua solução existente. Se houver mais de um servidor, você precisará levar em conta que pode haver falhas e que parte do tráfego terá que ser tratada pelo (s) servidor (es) restante (s). Além de obter o apache para consumir RAM, qual é o objetivo do seu teste? Sou um testador de software para poder ajudá-lo, mas preciso de mais informações para lhe dar bons conselhos sobre o que você deve fazer.

    
por 04.08.2018 / 11:31