Versão concisa:
Como apontado @ninjalj, o aplicativo de carga de trabalho provavelmente deve ser considerado a fonte autoritativa sobre se qualquer ajuste fornecido foi benéfico para o desempenho da carga de trabalho. Dependendo se seus requisitos são de latência ou apenas de taxa de transferência geral no sistema, você pode fazer o julgamento para determinar se as mudanças no comportamento atendem melhor aos seus requisitos de desempenho.
Nesse caso, estaria fazendo a alteração e percebendo se a latência geral do httpd
diminuiu.
Versão mais longa com exemplos específicos:
Para elaborar, vou colocar isso em contexto. Vamos ver o Apache httpd
. Você pode registrar a hora para concluir uma solicitação em microssegundos e o tamanho de cada solicitação usando as diretivas LogFormat
e CustomLog
. Por exemplo:
LogFormat "%h %m %D %b" perflog
CustomLog /var/log/httpd/performance.log perflog
Que produz uma saída semelhante a esta:
xxx.xxx.28.20 GET 41140 86
xxx.xxx.28.20 GET 34468 28
xxx.xxx.28.20 GET 47612 1434
xxx.xxx.28.20 GET 54860 868
xxx.xxx.28.20 POST 97055 6283
xxx.xxx.28.20 GET 33754 53
xxx.xxx.28.20 GET 68964 8416
xxx.xxx.28.20 GET 1143827 11528
xxx.xxx.28.20 GET 38055 61
xxx.xxx.64.208 HEAD 6255 -
xxx.xxx.28.20 GET 36922 142
xxx.xxx.28.20 GET 51871 5581
Vou me preocupar apenas com GET
solicitações para isso:
root@xxxxxxvlp14 /tmp $ grep GET /var/log/httpd/performance.log > work.log
root@xxxxxxvlp14 /tmp $ sed -i 's/-$/0/g' work.log
root@xxxxxvlp14 /tmp $
(por qualquer motivo, httpd
fornece um hífen em vez de um inteiro 0).
Podemos, então, programaticamente separá-lo:
#!/bin/bash
totalRequests=$(cat /tmp/work.log | wc -l )
totalTime=$(awk 'BEGIN{ count=0 } {count = count + $3} END { print count }' /tmp/work.log)
averageTime=$( printf "%.2f" $(bc -l <<< "$totalTime / $totalRequests "))
minTime=$(sort -nk 3 work.log | head -1 | awk '{print $3}')
maxTime=$(sort -rnk 3 work.log | head -1 | awk '{print $3}')
totalBytes=$(awk 'BEGIN{ count=0 } {count = count + $4} END { print count }' /tmp/work.log)
minBytes=$(sort -nk 4 work.log | head -1 | awk '{print $4}')
maxBytes=$(sort -rnk 4 work.log | head -1 | awk '{print $4}')
echo "Total Requests In Sample: $totalRequests"
echo
echo "Total Time Taken: $totalTime ms (average: $averageTime ms)"
echo "Longest Request: $maxTime ms"
echo "Shortest Request: $minTime ms"
echo
echo "Total Data Moved: $totalBytes bytes"
echo "Largest Request: $maxBytes bytes"
echo "Smallest Request: $minBytes bytes"
Por favor, nenhum comentário sobre o roteiro, é escrito para maior clareza, não eficiência. O acima produz o seguinte:
Total Requests In Sample: 207
Total Time Taken: 15138613 ms (average: 73133.40 ms)
Longest Request: 1143827 ms
Shortest Request: 1788 ms
Total Data Moved: 409825 bytes
Largest Request: 20476 bytes
Smallest Request: 0 bytes
Obviamente, o item acima ilustra por que é importante obter uma amostra longa. Os números estão corretos (o pedido de um minuto e meio era alguém gerando um relatório no formato Word que incluía imagens / gráficos, para os curiosos).
Assim, você convenceria o apache a fornecer uma amostra longa (provavelmente durante o dia inteiro) de atividade normal, fazer a alteração, girar os logs e começar a coletar registros novamente (por exemplo, aguardando por outro período de 24 horas) .
Cada serviço (NFS, outros servidores HTTP, Samba, servidores FTP, etc) terá sua própria maneira de coletar informações, mas geralmente haverá algum meio de registro de tempo e taxa de transferência.