2013-12-03 3 views
2

저는 현재 구축중인 웹 사이트에 대해 벤치마킹을 진행하고 있으며 응답 시간에 대한 그래프를 작성하고 싶습니다.GNUPlot을 사용하여 ApacheBench 출력 파일에서 응답 시간의 히스토그램을 어떻게 그립니 까?

starttime     seconds   ctime dtime ttime wait 
Tue Dec 03 16:24:53 2013 1386087893  2  413 415  367 
Tue Dec 03 16:24:49 2013 1386087889  1  468 469  452 
Tue Dec 03 16:24:54 2013 1386087894  9  479 488  446 
Tue Dec 03 16:24:49 2013 1386087889  1  497 498  437 
Tue Dec 03 16:24:54 2013 1386087894  33  465 498  458 
Tue Dec 03 16:24:53 2013 1386087893  1  507 508  506 
Tue Dec 03 16:24:51 2013 1386087891  0  544 544  512 

내가 Y 축 및 응답 시간에 수량 히스토그램이 데이터를 변환하고 싶습니다 :

> ab -n 100 -c 10 -g foo.tsv http://foo/ 

이 나에게 그렇게 등의 데이터와 TSV 파일을 제공합니다 : 여기 내 ApacheBench 사용의 (ttime)을 X 축에 표시합니다.

내 플롯 스크립트는 아래에 있지만 모두 비어있는 (0 바이트) jpeg 파일입니다.

clear 
reset 
set output "out.jpg" 
# Select histogram data 
set style data histogram 

set style fill solid border 

plot 'foo.tsv' using 5 
exit 

어떻게하면이 막대 그래프를 생성 할 수 있습니까?


보너스 이 데이터가 하나 또는 두 개의 히트를 가진 많은 데이터 포인트로 이어질 수 있다는 것을 알았습니다. 어떻게하면 가장 가까운 10ms로 ttime을 반올림하여 더 많은 히트를 가진 데이터 포인트를 줄 일 수 있습니까?

답변

3

몇 가지 : 당신은 출력에 jpg 파일을하려면 먼저 set terminal jpeg를 사용해야합니다

  1. . 그러나 비트 맵 이미지가 필요하다면 어쨌든 pngcairo 터미널을 사용할 것을 제안합니다.

  2. tsv은 열 구분 기호로 탭을 사용합니다. 기본적으로 gnuplot은 공백 문자를 구분자로 사용합니다.이 경우 다섯 번째 열은 항상 2013입니다. 따라서 set datafile separator '\t'을 사용하십시오.

  3. 일부 비닝을 사용하려면 smooth frequency에 적절한 비닝 함수를 사용해야합니다. 비닝 함수는 x 값을 저장합니다. y 값으로 1을 사용하므로 smooth frequency이 계산됩니다.

  4. 아마도 데이터 파일의 첫 번째 줄을 every ::1으로 건너 뛰어야 할 수 있습니다. 당신의 .P 파일에

set terminal pngcairo 
set output 'foo.png' 
set datafile separator '\t' 
set style fill solid border 
set boxwidth 8 absolute 
set yrange [0:*] 
bin(x) = 10*floor(x/10.0) 
plot 'foo.tsv' using (bin($5)):(1) every ::1 smooth frequency with boxes title 'ttime' 
+0

실제로 모든 :: 1이 필요한지 알기가 실제로 어렵습니다. gnuplot이 .tsv 파일의 첫 줄에있는 텍스트를 자동으로 무시하지 않는 것이 확실합니까? – netpoetica

+0

@netpoetica 히스토그램을 그릴 때 헤더 줄에 문제가 있다는 것을 알고 있습니다. [Y 축 오른쪽의 여유 공간] (http://stackoverflow.com/questions/27676515/redundant-space-at-right-side-of-y-axis). 상자로 플로팅 할 때 나는 확실하지 않았습니다. 그것이 내가 '아마도'라고 쓴 이유입니다. 그러나 실제로 그것이 필요하지 않은 것 같습니다. – Christoph

5

사본이 : 귀하의 경우

  • 나는 boxes 플롯 스타일을 사용합니다. 지금

    touch foo.p 
    gedit foo.p 
    

    # output as png image 
    set terminal png 
    
    # save file to "benchmark.png" 
    set output "benchmark.png" 
    
    # graph a title 
    set title "ab -n 100 -c 10 -g foo.tsv http://foo/" 
    
    # nicer aspect ratio for image size 
    set size 1,0.7 
    
    # y-axis grid 
    set grid y 
    
    # x-axis label 
    set xlabel "request" 
    
    # y-axis label 
    set ylabel "response time (ms)" 
    
    # plot data from "foo.tsv" using column 9 with smooth sbezier lines 
    plot "foo.tsv" using 9 smooth sbezier with lines title "server1:" 
    

    가 지금은 모든 것을 요약 한 ::

    gnuplot foo.p 
    
  • 0

    하여 foo.p의 플롯 파일을 생성, 그 파일에 데이터를 붙여 넣기하고 저장 이 스크립트의이 스레드에서 :

    #!/bin/bash 
    
    #URL to test 
    URL_ATAQUE="http://foo.bar" 
    #Results file 
    FICH_RESULT="resultados.tsv" 
    #Plot 
    IMAGEN_RESULT="grafica.png" 
    
    echo -e "Executing bench on $URL_ATAQUE\nPlease, wait..." 
    
    #Sintaxis: 
    #-n = Number of requests 
    #-c = simult. connections 
    #-g = output file 
    ab -n 5 -c 1 -g $FICH_RESULT $URL_ATAQUE 
    
    touch $FICH_RESULT 
    
    echo "set terminal png" > plot 
    echo "set output \"$IMAGEN_RESULT\"" >>plot 
    echo "set title \"$URL_ATAQUE\"" >>plot 
    echo "set size 1,0.7" >>plot 
    echo "set grid y" >> plot 
    echo "set xlabel \"Request\"" >> plot 
    echo "set ylabel \"Response time (ms)\"" >> plot 
    echo "plot \"$FICH_RESULT\" using 9 smooth sbezier with lines title \"server1:\"" >>plot 
    
    gnuplot plot 
    
    rm plot 
    rm $FICH_RESULT 
    
    gnome-open $IMAGEN_RESULT 
    #USE BELOW IF NOT IN GNOME 
    #xdg-open $IMAGEN_RESULT 
    

    필요한 경우 chmod + x를 실행하고 함께 실행하십시오./ fileName

    +0

    나는 왜이 답변이 downvoted인지 정말로 모르겠다. 그것은 내가 찾은 해결책을 나에게 준다. 감사! –