another revision based on feedback from @callahad & @6a68 & @ozten
|
@ -2,7 +2,7 @@
|
|||
|
||||
How can you build a Node.JS application that keeps running, even under *impossible* load?
|
||||
|
||||
This post offers an answer, which is captured in the following five lines of code:
|
||||
This post presents a technique and a library that implements that technique, all which is distilled into the following five lines of code:
|
||||
|
||||
var toobusy = require('toobusy');
|
||||
|
||||
|
@ -15,11 +15,13 @@ This post offers an answer, which is captured in the following five lines of cod
|
|||
|
||||
If your application is important to people, then it's worth spending a moment thinking about *disaster* scenarios.
|
||||
These are the good kind of disasters where your project becomes the apple of social media's eye and you go from ten thousand users a day to a million.
|
||||
With a bit of preparation, you can build something that serves as many users as possible during instantaneous two-order-of-magnitude growth, while you bring on the hardware.
|
||||
If you forego this preparation, then your service will become completely unusable at precisely the Wrong Time - when everyone is watching.
|
||||
With a bit of preparation you can build a service that can persevere during traffic bursts that exceed capacity by orders of magnitude.
|
||||
If you forego this preparation, then your service will become completely unusable at precisely the wrong time - *when everyone is watching*.
|
||||
|
||||
Another great reason to think about legitimate bursts traffic, is malicious bursts of traffic.
|
||||
The first step to mitigating DoS attacks is building servers that don't melt.
|
||||
Another great reason to think about legitimate bursts traffic, is malicious bursts of traffic:
|
||||
the first step to mitigating [DoS attacks][] is building servers that don't melt.
|
||||
|
||||
[DoS attacks]: http://en.wikipedia.org/wiki/Denial-of-service_attack
|
||||
|
||||
## Your Server Under Load
|
||||
|
||||
|
@ -42,7 +44,7 @@ Analysis of the data from this run tells a clear story:
|
|||
## Failing Gracefully
|
||||
|
||||
Next, I instrumented the [same application with the code from the beginning of this post][].
|
||||
This code causes the server to detect when load exceeds capacity and pre-emptively refuse requests.
|
||||
This code causes the server to detect when load exceeds capacity and preemptively refuse requests.
|
||||
The following graph depicts the performance of this version of the server as we increase connections attempts from 40 to 3000 per second.
|
||||
|
||||
[same application with the code from the beginning of this post]: https://gist.github.com/4532198#file-application_server_with_toobusy-js-L26-L29
|
||||
|
@ -51,11 +53,11 @@ The following graph depicts the performance of this version of the server as we
|
|||
|
||||
What do we learn from this graph and the underlying data?
|
||||
|
||||
**Pre-emptive limiting adds robustness**: Under load that exceeds capacity by an order of magnitude the application continues to behave reasonably.
|
||||
**Preemptive limiting adds robustness**: Under load that exceeds capacity by an order of magnitude the application continues to behave reasonably.
|
||||
|
||||
**Success and Failure is fast**: Average response time stays for the most part under 10 seconds.
|
||||
|
||||
**These failures don't suck**: With pre-emptive limiting we effectively convert slow clumsy failures (TCP timeouts), into fast deliberate failures (immediate 503 responses).
|
||||
**These failures don't suck**: With preemptive limiting we effectively convert slow clumsy failures (TCP timeouts), into fast deliberate failures (immediate 503 responses).
|
||||
|
||||
## How To Use It
|
||||
|
||||
|
@ -69,7 +71,7 @@ node-toobusy is available on [npm][] and [github][]. After installation (`npm i
|
|||
At the moment the library is included, it will begin actively monitoring the process, and will determine when the process is "too busy".
|
||||
You can then check if the process is toobusy at key points in your application:
|
||||
|
||||
// The absolute first piece of middleware we would register, to block requests
|
||||
// The absolute first piece of middle-ware we would register, to block requests
|
||||
// before we spend any time on them.
|
||||
app.use(function(req, res, next) {
|
||||
if (toobusy()) res.send(503, "I'm busy right now, sorry.");
|
||||
|
@ -96,14 +98,26 @@ Very quickly this approach becomes complex, requires system specific extensions,
|
|||
|
||||
What we want is a simpler solution that Just Works. This solution should conclude that the node.js process is too busy when it is *unable to serve requests in a timely fashion* - a criteria that is meaningful regardless of details of the other processes running on the server.
|
||||
|
||||
The approach taken by `node-toobusy` is to measure **event loop latency**.
|
||||
The approach taken by `node-toobusy` is to measure **event loop lag**.
|
||||
Recall that Node.JS is at its core an event loop.
|
||||
Work to be done is enqueued, and each iteration is processed.
|
||||
Work to be done is enqueued, and on each loop iteration is processed.
|
||||
As a node.js process becomes over-loaded, the queue grows and there is more work *to be* done than *can be* done.
|
||||
The degree to which a node.js process is overloaded can be understood by determining how long it takes a tiny bit of work to get through the event queue.
|
||||
In `node-toobusy` the library provides [libuv][] with a callback that should be invoked every 500 milliseconds.
|
||||
Subtracting 500ms from the actual time elapsed between invocations gives us a simple measure of event loop lag.
|
||||
|
||||
Given this, `node-toobusy` measures *event loop lag* to determine how busy the host process is, which is a simple and robust technique that works regardless of whatever else is running on the host machine.
|
||||
[libuv]: https://github.com/joyent/libuv
|
||||
|
||||
## Get Involved!
|
||||
In short, `node-toobusy` measures **event loop lag** to determine how busy the host process is, which is a simple and robust technique that works regardless of whatever else is running on the host machine.
|
||||
|
||||
`node-toobusy` is a library that makes it easy to build servers that don't melt. Read, follow, or fork on [github][] and let us know what you think!
|
||||
## Current State
|
||||
|
||||
`node-toobusy` is very new library that makes it easy to build servers that don't melt by measuring **event loop lag**:
|
||||
attempting to solve the general problem of determining if a node.js application is too busy.
|
||||
All of the servers described here as well as the load generation tools used in the post are available on [github][].
|
||||
|
||||
At Mozilla we're currently evaluating applying this approach to the [Persona][] service, and expect to refine the approach as we learn.
|
||||
I look forward to your feedback: in this post, on the [identity mailing list][], or in [github issues][].
|
||||
|
||||
[identity mailing list]: https://lists.mozilla.org/listinfo/dev-identity
|
||||
[github issues]: https://github.com/lloyd/node-toobusy/issues
|
||||
|
|
Двоичные данные
building_a_server_that_wont_melt/with.png
До Ширина: | Высота: | Размер: 33 KiB После Ширина: | Высота: | Размер: 26 KiB |
|
@ -34,144 +34,131 @@
|
|||
<g style="fill:none; color:white; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
</g>
|
||||
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
<path d='M53.5,370.0 L61.0,370.0 h0.01'/> <g transform="translate(46.5,373.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<path d='M53.5,352.0 L61.0,352.0 h0.01'/> <g transform="translate(46.5,355.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 0</text>
|
||||
</g>
|
||||
<path d='M53.5,334.4 L61.0,334.4 h0.01'/> <g transform="translate(46.5,338.1)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 2</text>
|
||||
</g>
|
||||
<path d='M53.5,298.8 L61.0,298.8 h0.01'/> <g transform="translate(46.5,302.5)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 4</text>
|
||||
</g>
|
||||
<path d='M53.5,263.2 L61.0,263.2 h0.01'/> <g transform="translate(46.5,266.9)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 6</text>
|
||||
</g>
|
||||
<path d='M53.5,227.6 L61.0,227.6 h0.01'/> <g transform="translate(46.5,231.3)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 8</text>
|
||||
</g>
|
||||
<path d='M53.5,192.0 L61.0,192.0 h0.01'/> <g transform="translate(46.5,195.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<path d='M53.5,295.7 L61.0,295.7 h0.01'/> <g transform="translate(46.5,299.4)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 10</text>
|
||||
</g>
|
||||
<path d='M53.5,156.5 L61.0,156.5 h0.01'/> <g transform="translate(46.5,160.2)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 12</text>
|
||||
</g>
|
||||
<path d='M53.5,120.9 L61.0,120.9 h0.01'/> <g transform="translate(46.5,124.6)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 14</text>
|
||||
</g>
|
||||
<path d='M53.5,85.3 L61.0,85.3 h0.01'/> <g transform="translate(46.5,89.0)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 16</text>
|
||||
</g>
|
||||
<path d='M53.5,49.7 L61.0,49.7 h0.01'/> <g transform="translate(46.5,53.4)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 18</text>
|
||||
</g>
|
||||
<path d='M53.5,14.1 L61.0,14.1 h0.01'/> <g transform="translate(46.5,17.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<path d='M53.5,239.4 L61.0,239.4 h0.01'/> <g transform="translate(46.5,243.1)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 20</text>
|
||||
</g>
|
||||
<path d='M53.5,370.0 L53.5,362.5 M53.5,14.1 L53.5,21.6 h0.01'/> <g transform="translate(53.5,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 0</text>
|
||||
<path d='M53.5,183.0 L61.0,183.0 h0.01'/> <g transform="translate(46.5,186.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 30</text>
|
||||
</g>
|
||||
<path d='M149.0,370.0 L149.0,362.5 M149.0,14.1 L149.0,21.6 h0.01'/> <g transform="translate(149.0,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 50</text>
|
||||
</g>
|
||||
<path d='M244.5,370.0 L244.5,362.5 M244.5,14.1 L244.5,21.6 h0.01'/> <g transform="translate(244.5,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 100</text>
|
||||
</g>
|
||||
<path d='M340.0,370.0 L340.0,362.5 M340.0,14.1 L340.0,21.6 h0.01'/> <g transform="translate(340.0,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 150</text>
|
||||
</g>
|
||||
<path d='M435.4,370.0 L435.4,362.5 M435.4,14.1 L435.4,21.6 h0.01'/> <g transform="translate(435.4,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 200</text>
|
||||
</g>
|
||||
<path d='M530.9,370.0 L530.9,362.5 M530.9,14.1 L530.9,21.6 h0.01'/> <g transform="translate(530.9,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 250</text>
|
||||
</g>
|
||||
<path d='M626.4,370.0 L626.4,362.5 M626.4,14.1 L626.4,21.6 h0.01'/> <g transform="translate(626.4,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 300</text>
|
||||
</g>
|
||||
<path d='M721.9,370.0 L721.9,362.5 M721.9,14.1 L721.9,21.6 h0.01'/> <g transform="translate(721.9,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 350</text>
|
||||
</g>
|
||||
<path d='M721.9,370.0 L714.4,370.0 h0.01'/> <g transform="translate(728.9,373.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 0</text>
|
||||
</g>
|
||||
<path d='M721.9,298.8 L714.4,298.8 h0.01'/> <g transform="translate(728.9,302.5)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 20</text>
|
||||
</g>
|
||||
<path d='M721.9,227.6 L714.4,227.6 h0.01'/> <g transform="translate(728.9,231.3)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<path d='M53.5,126.7 L61.0,126.7 h0.01'/> <g transform="translate(46.5,130.4)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 40</text>
|
||||
</g>
|
||||
<path d='M721.9,156.5 L714.4,156.5 h0.01'/> <g transform="translate(728.9,160.2)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<path d='M53.5,70.4 L61.0,70.4 h0.01'/> <g transform="translate(46.5,74.1)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 50</text>
|
||||
</g>
|
||||
<path d='M53.5,14.1 L61.0,14.1 h0.01'/> <g transform="translate(46.5,17.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 60</text>
|
||||
</g>
|
||||
<path d='M721.9,85.3 L714.4,85.3 h0.01'/> <g transform="translate(728.9,89.0)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<path d='M53.5,352.0 L53.5,344.5 M53.5,14.1 L53.5,21.6 h0.01'/> <g transform="translate(53.5,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 0</text>
|
||||
</g>
|
||||
<path d='M164.9,352.0 L164.9,344.5 M164.9,14.1 L164.9,21.6 h0.01'/> <g transform="translate(164.9,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 500</text>
|
||||
</g>
|
||||
<path d='M276.3,352.0 L276.3,344.5 M276.3,14.1 L276.3,21.6 h0.01'/> <g transform="translate(276.3,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 1000</text>
|
||||
</g>
|
||||
<path d='M387.7,352.0 L387.7,344.5 M387.7,14.1 L387.7,21.6 h0.01'/> <g transform="translate(387.7,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 1500</text>
|
||||
</g>
|
||||
<path d='M499.1,352.0 L499.1,344.5 M499.1,14.1 L499.1,21.6 h0.01'/> <g transform="translate(499.1,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 2000</text>
|
||||
</g>
|
||||
<path d='M610.5,352.0 L610.5,344.5 M610.5,14.1 L610.5,21.6 h0.01'/> <g transform="translate(610.5,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 2500</text>
|
||||
</g>
|
||||
<path d='M721.9,352.0 L721.9,344.5 M721.9,14.1 L721.9,21.6 h0.01'/> <g transform="translate(721.9,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 3000</text>
|
||||
</g>
|
||||
<path d='M721.9,352.0 L714.4,352.0 h0.01'/> <g transform="translate(728.9,355.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 0</text>
|
||||
</g>
|
||||
<path d='M721.9,284.4 L714.4,284.4 h0.01'/> <g transform="translate(728.9,288.1)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 20</text>
|
||||
</g>
|
||||
<path d='M721.9,216.8 L714.4,216.8 h0.01'/> <g transform="translate(728.9,220.5)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 40</text>
|
||||
</g>
|
||||
<path d='M721.9,149.3 L714.4,149.3 h0.01'/> <g transform="translate(728.9,153.0)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 60</text>
|
||||
</g>
|
||||
<path d='M721.9,81.7 L714.4,81.7 h0.01'/> <g transform="translate(728.9,85.4)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 80</text>
|
||||
</g>
|
||||
<path d='M721.9,14.1 L714.4,14.1 h0.01'/> <g transform="translate(728.9,17.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 100</text>
|
||||
</g>
|
||||
<path d='M53.5,14.1 L53.5,370.0 L721.9,370.0 L721.9,14.1 L53.5,14.1 Z h0.01'/> <g transform="translate(14.7,192.1) rotate(270)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<path d='M53.5,14.1 L53.5,352.0 L721.9,352.0 L721.9,14.1 L53.5,14.1 Z h0.01'/> <g transform="translate(14.7,183.1) rotate(270)" style="stroke:none; fill:red; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text>average request latency (s)</text>
|
||||
</g>
|
||||
<g transform="translate(775.0,192.1) rotate(270)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<g transform="translate(775.0,183.1) rotate(270)" style="stroke:none; fill:green; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text>TCP errors (%)</text>
|
||||
</g>
|
||||
<g transform="translate(387.7,393.2)" style="stroke:none; fill:gray; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text>Approximate connections per second</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_1" ><title>gnuplot_plot_1</title>
|
||||
<g style="fill:none; color:red; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
<g transform="translate(665.4,32.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text>latency</text>
|
||||
</g>
|
||||
<path d='M672.4,29.1 L707.9,29.1 M57.3,369.9 L61.1,369.9 L65.0,369.9 L68.8,369.8 L72.6,369.8 L76.4,369.8
|
||||
L80.2,369.8 L84.1,369.7 L87.9,369.7 L91.7,367.0 L95.5,367.1 L99.3,367.8 L103.2,368.6 L107.0,368.3
|
||||
L110.8,368.5 L114.6,366.2 L118.4,368.7 L122.2,364.6 L126.1,367.6 L129.9,368.7 L133.7,364.9 L137.5,368.5
|
||||
L141.3,365.5 L145.2,365.2 L149.0,367.1 L152.8,359.3 L156.6,362.0 L160.4,366.1 L164.3,366.5 L168.1,361.1
|
||||
L171.9,355.2 L175.7,363.0 L179.5,355.8 L183.4,360.7 L187.2,352.5 L191.0,357.3 L194.8,360.6 L198.6,363.1
|
||||
L202.5,357.7 L206.3,354.2 L210.1,350.9 L213.9,358.5 L217.7,353.4 L221.6,359.3 L225.4,332.9 L229.2,347.2
|
||||
L233.0,353.4 L236.8,357.0 L240.7,350.5 L244.5,346.2 L248.3,360.1 L252.1,344.0 L255.9,358.9 L259.7,352.2
|
||||
L263.6,359.7 L267.4,340.2 L271.2,346.7 L275.0,349.1 L278.8,342.0 L282.7,327.4 L286.5,350.3 L290.3,345.5
|
||||
L294.1,313.8 L297.9,349.3 L301.8,343.5 L305.6,334.3 L309.4,330.5 L313.2,351.3 L317.0,348.1 L320.9,343.1
|
||||
L324.7,343.2 L328.5,242.2 L332.3,342.2 L336.1,336.3 L340.0,331.5 L343.8,320.6 L347.6,303.3 L351.4,331.6
|
||||
L355.2,328.0 L359.1,343.3 L362.9,340.9 L366.7,294.3 L370.5,327.1 L374.3,330.2 L378.2,336.3 L382.0,350.2
|
||||
L385.8,318.4 L389.6,346.3 L393.4,306.5 L399.2,319.9 L403.0,321.7 L406.8,276.7 L410.6,242.9 L414.4,41.7
|
||||
L418.3,331.4 L422.1,340.8 L425.9,328.8 L429.7,291.2 L433.5,336.8 L437.4,338.7 L441.2,331.8 L445.0,216.2
|
||||
L448.8,305.8 L452.6,163.3 L456.4,260.8 L460.3,300.3 L464.1,306.5 L467.9,271.3 L471.7,329.5 L475.5,350.0
|
||||
L479.4,315.2 L483.2,276.7 L487.0,299.5 L490.8,321.3 L496.6,316.6 L500.4,320.0 L504.2,245.8 L508.0,308.0
|
||||
L511.8,339.9 L515.7,311.0 L519.5,309.4 L523.3,327.1 L527.1,304.1 L530.9,344.4 L536.7,286.6 L540.5,194.5
|
||||
L544.3,88.0 L548.1,331.3 L551.9,329.9 L557.7,288.5 L561.5,267.9 L565.3,344.9 L569.1,208.8 L572.9,267.5
|
||||
L578.7,262.2 L582.5,254.7 L586.3,266.4 L590.1,355.0 L593.9,325.8 L597.8,285.5 L603.5,269.7 L607.3,278.1
|
||||
L613.0,307.0 L616.9,318.9 L620.7,315.6 L624.5,292.8 L628.3,322.4 L632.1,325.0 L637.9,169.2 L641.7,307.4
|
||||
L645.5,318.7 L649.3,319.4 L655.1,215.6 L658.9,185.5 L662.7,260.3 L668.4,340.8 L672.2,229.0 L676.1,255.8
|
||||
L679.9,290.7 L683.7,340.9 L689.4,299.7 L693.3,283.9 L699.0,255.1 L702.8,300.1 L706.6,227.5 h0.01'/></g>
|
||||
<path d='M672.4,29.1 L707.9,29.1 M57.3,352.0 L61.1,352.0 L64.9,352.0 L68.7,351.9 L72.4,351.9 L76.2,351.9
|
||||
L80.0,351.9 L83.8,351.9 L87.6,351.9 L91.4,351.1 L95.2,351.1 L99.0,351.3 L102.7,351.6 L106.5,351.5
|
||||
L110.3,351.5 L114.1,350.8 L117.9,351.6 L121.7,350.3 L125.5,351.2 L129.3,351.6 L133.0,350.4 L136.8,351.5
|
||||
L140.6,350.6 L144.4,350.5 L148.2,351.1 L152.0,348.6 L155.8,349.5 L159.6,350.8 L163.3,350.9 L167.1,349.2
|
||||
L170.9,347.3 L174.7,349.8 L178.5,347.5 L182.3,349.1 L186.1,346.5 L189.9,348.0 L193.6,349.0 L197.4,349.8
|
||||
L201.2,348.1 L205.0,347.0 L208.8,346.0 L212.6,348.4 L216.4,346.7 L220.2,348.6 L223.9,340.3 L227.7,344.8
|
||||
L231.5,346.8 L235.3,347.9 L239.1,345.8 L242.9,344.5 L246.7,348.9 L250.5,343.8 L254.2,348.5 L258.0,346.4
|
||||
L261.8,348.7 L265.6,342.6 L269.4,344.6 L273.2,345.4 L277.0,343.1 L280.8,338.5 L284.5,345.8 L288.3,344.2
|
||||
L292.1,334.2 L295.9,345.4 L299.7,343.6 L303.5,340.7 L307.3,339.5 L311.1,346.1 L314.8,345.1 L318.6,343.5
|
||||
L322.4,343.5 L326.2,311.6 L330.0,343.2 L333.8,341.3 L337.6,339.8 L341.4,336.4 L345.1,330.9 L348.9,339.9
|
||||
L352.7,338.7 L356.5,343.6 L360.3,342.8 L364.1,328.0 L367.9,338.4 L371.7,339.4 L375.4,341.3 L379.2,345.7
|
||||
L383.0,335.7 L386.8,344.5 L390.6,331.9 L396.3,336.2 L400.1,336.7 L403.9,322.5 L407.6,311.8 L411.4,248.1
|
||||
L415.2,339.8 L419.0,342.7 L422.8,339.0 L426.6,327.1 L430.4,341.5 L434.2,342.1 L437.9,339.9 L441.7,303.3
|
||||
L445.5,331.7 L449.3,286.6 L453.1,317.4 L456.9,329.9 L460.7,331.9 L464.5,320.8 L468.2,339.2 L472.0,345.7
|
||||
L475.8,334.7 L479.6,322.5 L483.4,329.7 L487.2,336.6 L492.9,335.1 L496.6,336.2 L500.4,312.7 L504.2,332.4
|
||||
L508.0,342.5 L511.8,333.3 L515.6,332.8 L519.4,338.4 L523.2,331.1 L527.0,343.9 L532.6,325.6 L536.4,296.5
|
||||
L540.2,262.8 L544.0,339.7 L547.8,339.3 L553.5,326.2 L557.3,319.7 L561.0,344.0 L564.8,301.0 L568.6,319.6
|
||||
L574.3,317.9 L578.1,315.5 L581.9,319.2 L585.7,347.2 L589.4,338.0 L593.2,325.3 L598.9,320.2 L602.7,322.9
|
||||
L608.4,332.1 L612.2,335.8 L616.0,334.8 L619.7,327.6 L623.5,336.9 L627.3,337.7 L633.0,288.5 L636.8,332.2
|
||||
L640.6,335.8 L644.4,336.0 L650.0,303.1 L653.8,293.6 L657.6,317.3 L663.3,342.8 L667.1,307.4 L670.9,315.9
|
||||
L674.7,326.9 L678.5,342.8 L684.1,329.8 L687.9,324.7 L693.6,315.6 L697.4,329.9 L701.2,306.9 h0.01'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2" ><title>gnuplot_plot_2</title>
|
||||
<g style="fill:none; color:green; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
<g transform="translate(665.4,47.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text>errors</text>
|
||||
<text>TCP errors</text>
|
||||
</g>
|
||||
<path d='M672.4,44.1 L707.9,44.1 M57.3,370.0 L61.1,370.0 L65.0,370.0 L68.8,370.0 L72.6,370.0 L76.4,370.0
|
||||
L80.2,370.0 L84.1,370.0 L87.9,370.0 L91.7,370.0 L95.5,370.0 L99.3,370.0 L103.2,370.0 L107.0,370.0
|
||||
L110.8,370.0 L114.6,370.0 L118.4,370.0 L122.2,370.0 L126.1,370.0 L129.9,370.0 L133.7,370.0 L137.5,370.0
|
||||
L141.3,370.0 L145.2,370.0 L149.0,370.0 L152.8,370.0 L156.6,370.0 L160.4,370.0 L164.3,370.0 L168.1,370.0
|
||||
L171.9,370.0 L175.7,370.0 L179.5,370.0 L183.4,370.0 L187.2,370.0 L191.0,370.0 L194.8,370.0 L198.6,370.0
|
||||
L202.5,370.0 L206.3,370.0 L210.1,370.0 L213.9,370.0 L217.7,370.0 L221.6,370.0 L225.4,370.0 L229.2,370.0
|
||||
L233.0,370.0 L236.8,370.0 L240.7,370.0 L244.5,370.0 L248.3,370.0 L252.1,370.0 L255.9,370.0 L259.7,370.0
|
||||
L263.6,370.0 L267.4,370.0 L271.2,370.0 L275.0,370.0 L278.8,370.0 L282.7,370.0 L286.5,370.0 L290.3,370.0
|
||||
L294.1,370.0 L297.9,370.0 L301.8,370.0 L305.6,370.0 L309.4,370.0 L313.2,370.0 L317.0,370.0 L320.9,370.0
|
||||
L324.7,370.0 L328.5,360.3 L332.3,370.0 L336.1,370.0 L340.0,370.0 L343.8,370.0 L347.6,361.8 L351.4,370.0
|
||||
L355.2,367.3 L359.1,370.0 L362.9,370.0 L366.7,367.2 L370.5,370.0 L374.3,370.0 L378.2,370.0 L382.0,370.0
|
||||
L385.8,370.0 L389.6,370.0 L393.4,370.0 L399.2,370.0 L403.0,360.4 L406.8,361.3 L410.6,347.4 L414.4,354.8
|
||||
L418.3,370.0 L422.1,370.0 L425.9,363.8 L429.7,370.0 L433.5,370.0 L437.4,370.0 L441.2,367.0 L445.0,332.4
|
||||
L448.8,370.0 L452.6,351.4 L456.4,358.8 L460.3,341.9 L464.1,360.3 L467.9,360.0 L471.7,364.7 L475.5,370.0
|
||||
L479.4,342.4 L483.2,360.5 L487.0,363.4 L490.8,360.7 L496.6,370.0 L500.4,370.0 L504.2,341.7 L508.0,356.1
|
||||
L511.8,370.0 L515.7,359.7 L519.5,370.0 L523.3,370.0 L527.1,369.7 L530.9,369.4 L536.7,366.6 L540.5,343.1
|
||||
L544.3,331.8 L548.1,370.0 L551.9,370.0 L557.7,356.3 L561.5,350.3 L565.3,368.3 L569.1,334.5 L572.9,356.1
|
||||
L578.7,352.6 L582.5,370.0 L586.3,370.0 L590.1,370.0 L593.9,370.0 L597.8,362.3 L603.5,370.0 L607.3,357.1
|
||||
L613.0,345.3 L616.9,369.5 L620.7,370.0 L624.5,365.3 L628.3,370.0 L632.1,369.7 L637.9,319.7 L641.7,366.3
|
||||
L645.5,365.6 L649.3,368.0 L655.1,353.4 L658.9,348.2 L662.7,355.9 L668.4,370.0 L672.2,326.4 L676.1,351.2
|
||||
L679.9,367.8 L683.7,370.0 L689.4,341.8 L693.3,366.4 L699.0,343.2 L702.8,362.9 L706.6,326.7 h0.01'/></g>
|
||||
<path d='M672.4,44.1 L707.9,44.1 M57.3,352.0 L61.1,352.0 L64.9,352.0 L68.7,352.0 L72.4,352.0 L76.2,352.0
|
||||
L80.0,352.0 L83.8,352.0 L87.6,352.0 L91.4,352.0 L95.2,352.0 L99.0,352.0 L102.7,352.0 L106.5,352.0
|
||||
L110.3,352.0 L114.1,352.0 L117.9,352.0 L121.7,352.0 L125.5,352.0 L129.3,352.0 L133.0,352.0 L136.8,352.0
|
||||
L140.6,352.0 L144.4,352.0 L148.2,352.0 L152.0,352.0 L155.8,352.0 L159.6,352.0 L163.3,352.0 L167.1,352.0
|
||||
L170.9,352.0 L174.7,352.0 L178.5,352.0 L182.3,352.0 L186.1,352.0 L189.9,352.0 L193.6,352.0 L197.4,352.0
|
||||
L201.2,352.0 L205.0,352.0 L208.8,352.0 L212.6,352.0 L216.4,352.0 L220.2,352.0 L223.9,352.0 L227.7,352.0
|
||||
L231.5,352.0 L235.3,352.0 L239.1,352.0 L242.9,352.0 L246.7,352.0 L250.5,352.0 L254.2,352.0 L258.0,352.0
|
||||
L261.8,352.0 L265.6,352.0 L269.4,352.0 L273.2,352.0 L277.0,352.0 L280.8,352.0 L284.5,352.0 L288.3,352.0
|
||||
L292.1,352.0 L295.9,352.0 L299.7,352.0 L303.5,352.0 L307.3,352.0 L311.1,352.0 L314.8,352.0 L318.6,352.0
|
||||
L322.4,352.0 L326.2,342.8 L330.0,352.0 L333.8,352.0 L337.6,352.0 L341.4,352.0 L345.1,344.2 L348.9,352.0
|
||||
L352.7,349.4 L356.5,352.0 L360.3,352.0 L364.1,349.4 L367.9,352.0 L371.7,352.0 L375.4,352.0 L379.2,352.0
|
||||
L383.0,352.0 L386.8,352.0 L390.6,352.0 L396.3,352.0 L400.1,342.9 L403.9,343.7 L407.6,330.6 L411.4,337.6
|
||||
L415.2,352.0 L419.0,352.0 L422.8,346.1 L426.6,352.0 L430.4,352.0 L434.2,352.0 L437.9,349.1 L441.7,316.3
|
||||
L445.5,352.0 L449.3,334.3 L453.1,341.4 L456.9,325.3 L460.7,342.8 L464.5,342.5 L468.2,347.0 L472.0,352.0
|
||||
L475.8,325.8 L479.6,343.0 L483.4,345.7 L487.2,343.2 L492.9,352.0 L496.6,352.0 L500.4,325.2 L504.2,338.8
|
||||
L508.0,352.0 L511.8,342.2 L515.6,352.0 L519.4,352.0 L523.2,351.7 L527.0,351.5 L532.6,348.8 L536.4,326.5
|
||||
L540.2,315.7 L544.0,352.0 L547.8,352.0 L553.5,338.9 L557.3,333.2 L561.0,350.4 L564.8,318.3 L568.6,338.8
|
||||
L574.3,335.5 L578.1,352.0 L581.9,352.0 L585.7,352.0 L589.4,352.0 L593.2,344.7 L598.9,352.0 L602.7,339.7
|
||||
L608.4,328.6 L612.2,351.5 L616.0,352.0 L619.7,347.5 L623.5,352.0 L627.3,351.7 L633.0,304.2 L636.8,348.5
|
||||
L640.6,347.9 L644.4,350.1 L650.0,336.2 L653.8,331.3 L657.6,338.6 L663.3,352.0 L667.1,310.6 L670.9,334.2
|
||||
L674.7,349.9 L678.5,352.0 L684.1,325.2 L687.9,348.6 L693.6,326.6 L697.4,345.2 L701.2,310.9 h0.01'/></g>
|
||||
</g>
|
||||
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
<path d='M53.5,14.1 L53.5,370.0 L721.9,370.0 L721.9,14.1 L53.5,14.1 Z h0.01'/></g>
|
||||
<path d='M53.5,14.1 L53.5,352.0 L721.9,352.0 L721.9,14.1 L53.5,14.1 Z h0.01'/></g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
|
До Ширина: | Высота: | Размер: 13 KiB После Ширина: | Высота: | Размер: 12 KiB |
Двоичные данные
building_a_server_that_wont_melt/without.png
До Ширина: | Высота: | Размер: 39 KiB После Ширина: | Высота: | Размер: 34 KiB |
|
@ -34,123 +34,123 @@
|
|||
<g style="fill:none; color:white; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
</g>
|
||||
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
<path d='M53.5,370.0 L61.0,370.0 h0.01'/> <g transform="translate(46.5,373.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<path d='M53.5,352.0 L61.0,352.0 h0.01'/> <g transform="translate(46.5,355.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 0</text>
|
||||
</g>
|
||||
<path d='M53.5,310.7 L61.0,310.7 h0.01'/> <g transform="translate(46.5,314.4)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<path d='M53.5,295.7 L61.0,295.7 h0.01'/> <g transform="translate(46.5,299.4)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 10</text>
|
||||
</g>
|
||||
<path d='M53.5,251.4 L61.0,251.4 h0.01'/> <g transform="translate(46.5,255.1)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<path d='M53.5,239.4 L61.0,239.4 h0.01'/> <g transform="translate(46.5,243.1)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 20</text>
|
||||
</g>
|
||||
<path d='M53.5,192.0 L61.0,192.0 h0.01'/> <g transform="translate(46.5,195.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<path d='M53.5,183.0 L61.0,183.0 h0.01'/> <g transform="translate(46.5,186.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 30</text>
|
||||
</g>
|
||||
<path d='M53.5,132.7 L61.0,132.7 h0.01'/> <g transform="translate(46.5,136.4)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<path d='M53.5,126.7 L61.0,126.7 h0.01'/> <g transform="translate(46.5,130.4)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 40</text>
|
||||
</g>
|
||||
<path d='M53.5,73.4 L61.0,73.4 h0.01'/> <g transform="translate(46.5,77.1)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<path d='M53.5,70.4 L61.0,70.4 h0.01'/> <g transform="translate(46.5,74.1)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 50</text>
|
||||
</g>
|
||||
<path d='M53.5,14.1 L61.0,14.1 h0.01'/> <g transform="translate(46.5,17.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text> 60</text>
|
||||
</g>
|
||||
<path d='M53.5,370.0 L53.5,362.5 M53.5,14.1 L53.5,21.6 h0.01'/> <g transform="translate(53.5,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<path d='M53.5,352.0 L53.5,344.5 M53.5,14.1 L53.5,21.6 h0.01'/> <g transform="translate(53.5,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 0</text>
|
||||
</g>
|
||||
<path d='M149.0,370.0 L149.0,362.5 M149.0,14.1 L149.0,21.6 h0.01'/> <g transform="translate(149.0,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 50</text>
|
||||
</g>
|
||||
<path d='M244.5,370.0 L244.5,362.5 M244.5,14.1 L244.5,21.6 h0.01'/> <g transform="translate(244.5,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 100</text>
|
||||
</g>
|
||||
<path d='M340.0,370.0 L340.0,362.5 M340.0,14.1 L340.0,21.6 h0.01'/> <g transform="translate(340.0,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 150</text>
|
||||
</g>
|
||||
<path d='M435.4,370.0 L435.4,362.5 M435.4,14.1 L435.4,21.6 h0.01'/> <g transform="translate(435.4,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<path d='M127.8,352.0 L127.8,344.5 M127.8,14.1 L127.8,21.6 h0.01'/> <g transform="translate(127.8,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 200</text>
|
||||
</g>
|
||||
<path d='M530.9,370.0 L530.9,362.5 M530.9,14.1 L530.9,21.6 h0.01'/> <g transform="translate(530.9,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 250</text>
|
||||
<path d='M202.0,352.0 L202.0,344.5 M202.0,14.1 L202.0,21.6 h0.01'/> <g transform="translate(202.0,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 400</text>
|
||||
</g>
|
||||
<path d='M626.4,370.0 L626.4,362.5 M626.4,14.1 L626.4,21.6 h0.01'/> <g transform="translate(626.4,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 300</text>
|
||||
<path d='M276.3,352.0 L276.3,344.5 M276.3,14.1 L276.3,21.6 h0.01'/> <g transform="translate(276.3,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 600</text>
|
||||
</g>
|
||||
<path d='M721.9,370.0 L721.9,362.5 M721.9,14.1 L721.9,21.6 h0.01'/> <g transform="translate(721.9,388.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 350</text>
|
||||
<path d='M350.6,352.0 L350.6,344.5 M350.6,14.1 L350.6,21.6 h0.01'/> <g transform="translate(350.6,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 800</text>
|
||||
</g>
|
||||
<path d='M721.9,370.0 L714.4,370.0 h0.01'/> <g transform="translate(728.9,373.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<path d='M424.8,352.0 L424.8,344.5 M424.8,14.1 L424.8,21.6 h0.01'/> <g transform="translate(424.8,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 1000</text>
|
||||
</g>
|
||||
<path d='M499.1,352.0 L499.1,344.5 M499.1,14.1 L499.1,21.6 h0.01'/> <g transform="translate(499.1,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 1200</text>
|
||||
</g>
|
||||
<path d='M573.4,352.0 L573.4,344.5 M573.4,14.1 L573.4,21.6 h0.01'/> <g transform="translate(573.4,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 1400</text>
|
||||
</g>
|
||||
<path d='M647.6,352.0 L647.6,344.5 M647.6,14.1 L647.6,21.6 h0.01'/> <g transform="translate(647.6,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 1600</text>
|
||||
</g>
|
||||
<path d='M721.9,352.0 L721.9,344.5 M721.9,14.1 L721.9,21.6 h0.01'/> <g transform="translate(721.9,370.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text> 1800</text>
|
||||
</g>
|
||||
<path d='M721.9,352.0 L714.4,352.0 h0.01'/> <g transform="translate(728.9,355.7)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 0</text>
|
||||
</g>
|
||||
<path d='M721.9,298.8 L714.4,298.8 h0.01'/> <g transform="translate(728.9,302.5)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<path d='M721.9,284.4 L714.4,284.4 h0.01'/> <g transform="translate(728.9,288.1)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 20</text>
|
||||
</g>
|
||||
<path d='M721.9,227.6 L714.4,227.6 h0.01'/> <g transform="translate(728.9,231.3)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<path d='M721.9,216.8 L714.4,216.8 h0.01'/> <g transform="translate(728.9,220.5)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 40</text>
|
||||
</g>
|
||||
<path d='M721.9,156.5 L714.4,156.5 h0.01'/> <g transform="translate(728.9,160.2)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<path d='M721.9,149.3 L714.4,149.3 h0.01'/> <g transform="translate(728.9,153.0)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 60</text>
|
||||
</g>
|
||||
<path d='M721.9,85.3 L714.4,85.3 h0.01'/> <g transform="translate(728.9,89.0)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<path d='M721.9,81.7 L714.4,81.7 h0.01'/> <g transform="translate(728.9,85.4)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 80</text>
|
||||
</g>
|
||||
<path d='M721.9,14.1 L714.4,14.1 h0.01'/> <g transform="translate(728.9,17.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:start">
|
||||
<text> 100</text>
|
||||
</g>
|
||||
<path d='M53.5,14.1 L53.5,370.0 L721.9,370.0 L721.9,14.1 L53.5,14.1 Z h0.01'/> <g transform="translate(14.7,192.1) rotate(270)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<path d='M53.5,14.1 L53.5,352.0 L721.9,352.0 L721.9,14.1 L53.5,14.1 Z h0.01'/> <g transform="translate(14.7,183.1) rotate(270)" style="stroke:none; fill:red; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text>average request latency (s)</text>
|
||||
</g>
|
||||
<g transform="translate(775.0,192.1) rotate(270)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<g transform="translate(775.0,183.1) rotate(270)" style="stroke:none; fill:green; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text>TCP errors (%)</text>
|
||||
</g>
|
||||
<g transform="translate(387.7,393.2)" style="stroke:none; fill:gray; font-family:Verdana; font-size:10.00pt; text-anchor:middle">
|
||||
<text>Approximate connections per second</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_1" ><title>gnuplot_plot_1</title>
|
||||
<g style="fill:none; color:red; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
<g transform="translate(665.4,32.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text>latency</text>
|
||||
</g>
|
||||
<path d='M672.4,29.1 L707.9,29.1 M57.3,370.0 L61.1,370.0 L65.0,370.0 L68.8,369.9 L72.6,369.9 L76.4,369.9
|
||||
L80.2,369.9 L84.1,369.9 L87.9,369.9 L91.7,369.0 L95.5,366.9 L99.3,364.9 L103.2,362.4 L107.0,359.9
|
||||
L110.8,358.0 L114.6,357.2 L118.4,356.1 L122.2,356.1 L126.1,352.5 L129.9,344.6 L133.7,348.5 L137.5,348.4
|
||||
L141.3,350.6 L145.2,343.0 L149.0,343.7 L152.8,346.4 L156.6,348.1 L160.4,319.4 L164.3,338.8 L168.1,336.0
|
||||
L171.9,297.8 L175.7,324.5 L179.5,339.3 L183.4,305.1 L187.2,333.9 L191.0,337.2 L194.8,330.7 L198.6,326.3
|
||||
L202.5,316.2 L206.3,312.2 L210.1,268.5 L213.9,347.9 L217.7,330.1 L221.6,294.0 L225.4,223.4 L229.2,240.3
|
||||
L233.0,282.7 L238.7,249.4 L242.6,212.6 L246.4,215.3 L250.2,165.8 L254.0,165.9 L257.8,148.4 L263.6,120.2
|
||||
L267.4,156.1 L271.2,149.1 L275.0,114.9 L278.8,100.9 L284.6,122.8 L288.4,91.7 L292.2,152.3 L297.9,126.2
|
||||
L301.8,117.2 L305.6,122.6 L311.3,115.2 L315.1,77.5 L319.0,81.9 L324.7,76.6 L328.5,114.8 L332.3,89.9
|
||||
L338.0,68.0 L341.9,89.7 L345.7,83.4 L351.4,81.4 L355.2,73.7 L359.1,71.7 L364.8,58.9 L368.6,45.8
|
||||
L372.4,118.3 L378.2,53.6 L383.9,69.8 L391.5,55.2 L397.2,93.3 L403.0,64.9 L408.7,61.4 L414.4,59.0
|
||||
L422.1,53.9 L425.9,62.5 L433.5,58.7 L439.3,48.0 L445.0,67.6 L452.6,47.4 L456.4,71.7 L462.2,59.1
|
||||
L467.9,38.5 L473.6,83.7 L479.4,38.0 L485.1,61.8 L490.8,48.8 L498.5,57.0 L504.2,46.0 L511.8,71.2
|
||||
L517.6,48.5 L527.1,74.9 L532.8,50.4 L542.4,68.4 L548.1,42.5 L557.7,89.7 L563.4,46.1 L572.9,72.0
|
||||
L578.7,43.5 L584.4,63.7 L592.0,51.8 L597.8,50.6 L605.4,55.9 L613.0,43.7 L620.7,58.2 L628.3,54.0
|
||||
L636.0,86.0 L645.5,56.1 L653.2,61.9 L664.6,62.0 L672.2,63.8 L681.8,62.5 L689.4,82.4 L699.0,60.3
|
||||
L704.7,38.4 h0.01'/></g>
|
||||
<path d='M672.4,29.1 L707.9,29.1 M59.8,352.0 L66.1,352.0 L72.4,352.0 L78.8,351.9 L85.1,351.9 L91.4,351.9
|
||||
L97.7,351.9 L104.0,351.9 L110.3,351.9 L116.6,351.1 L122.9,349.1 L129.3,347.2 L135.6,344.7 L141.9,342.4
|
||||
L148.2,340.6 L154.5,339.8 L160.8,338.8 L167.1,338.8 L173.4,335.4 L179.8,327.9 L186.1,331.6 L192.4,331.5
|
||||
L198.7,333.6 L205.0,326.4 L211.3,327.1 L217.6,329.6 L223.9,331.2 L230.3,303.9 L236.6,322.4 L242.9,319.7
|
||||
L249.2,283.5 L255.5,308.8 L261.8,322.8 L268.1,290.3 L274.4,317.7 L280.8,320.9 L287.1,314.7 L293.4,310.5
|
||||
L299.7,300.9 L306.0,297.2 L312.3,255.6 L318.6,331.0 L324.9,314.1 L331.3,279.8 L337.6,212.8 L343.9,228.9
|
||||
L350.2,269.2 L359.7,237.5 L366.0,202.6 L372.3,205.1 L378.6,158.1 L384.9,158.3 L391.2,141.6 L400.7,114.8
|
||||
L407.0,148.9 L413.3,142.3 L419.6,109.8 L425.9,96.5 L435.4,117.3 L441.7,87.8 L448.0,145.3 L457.5,120.5
|
||||
L463.8,112.0 L470.1,117.1 L479.6,110.1 L485.9,74.3 L492.2,78.5 L501.7,73.4 L508.0,109.7 L514.3,86.0
|
||||
L523.8,65.3 L530.1,85.8 L536.4,79.9 L545.9,78.0 L552.2,70.7 L558.5,68.8 L568.0,56.6 L574.3,44.2
|
||||
L580.6,113.1 L590.1,51.6 L599.5,67.0 L612.2,53.1 L621.6,89.3 L631.1,62.3 L640.6,59.0 L650.0,56.8
|
||||
L662.7,51.9 L669.0,60.0 L681.6,56.4 L691.1,46.3 L700.5,64.9 L713.2,45.7 L719.5,68.8 h0.01'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2" ><title>gnuplot_plot_2</title>
|
||||
<g style="fill:none; color:green; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
<g transform="translate(665.4,47.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:10.00pt; text-anchor:end">
|
||||
<text>errors</text>
|
||||
<text>TCP errors</text>
|
||||
</g>
|
||||
<path d='M672.4,44.1 L707.9,44.1 M57.3,370.0 L61.1,370.0 L65.0,370.0 L68.8,370.0 L72.6,370.0 L76.4,370.0
|
||||
L80.2,370.0 L84.1,370.0 L87.9,370.0 L91.7,370.0 L95.5,370.0 L99.3,370.0 L103.2,370.0 L107.0,370.0
|
||||
L110.8,370.0 L114.6,370.0 L118.4,370.0 L122.2,370.0 L126.1,370.0 L129.9,370.0 L133.7,370.0 L137.5,370.0
|
||||
L141.3,370.0 L145.2,370.0 L149.0,370.0 L152.8,370.0 L156.6,370.0 L160.4,370.0 L164.3,370.0 L168.1,370.0
|
||||
L171.9,370.0 L175.7,370.0 L179.5,370.0 L183.4,370.0 L187.2,370.0 L191.0,370.0 L194.8,370.0 L198.6,370.0
|
||||
L202.5,370.0 L206.3,370.0 L210.1,369.2 L213.9,369.6 L217.7,370.0 L221.6,360.3 L225.4,331.2 L229.2,336.9
|
||||
L233.0,335.1 L238.7,325.8 L242.6,307.2 L246.4,302.7 L250.2,305.3 L254.0,300.5 L257.8,282.2 L263.6,259.6
|
||||
L267.4,265.8 L271.2,268.7 L275.0,233.7 L278.8,235.8 L284.6,225.8 L288.4,220.3 L292.2,256.1 L297.9,187.6
|
||||
L301.8,255.9 L305.6,221.5 L311.3,189.0 L315.1,225.9 L319.0,215.4 L324.7,150.6 L328.5,215.6 L332.3,217.6
|
||||
L338.0,126.2 L341.9,193.8 L345.7,195.3 L351.4,146.1 L355.2,200.5 L359.1,205.1 L364.8,95.3 L368.6,189.5
|
||||
L372.4,211.8 L378.2,80.4 L383.9,135.4 L391.1,14.1 M391.8,14.1 L397.2,163.3 L403.0,59.5 L408.7,96.0
|
||||
L414.4,84.9 L422.1,20.9 L425.9,137.0 L433.5,43.7 L439.3,59.7 L445.0,126.1 L449.4,14.1 M453.9,14.1
|
||||
L456.4,183.3 L462.2,61.0 L467.9,31.1 L473.6,121.6 L479.0,14.1 M479.7,14.1 L485.1,135.0 L490.8,59.3
|
||||
L498.5,90.3 L504.2,58.5 L511.8,85.1 L517.6,67.9 L527.1,69.8 L532.8,86.2 L542.4,62.6 L548.1,83.6
|
||||
L557.7,94.8 L563.4,65.5 L572.9,98.9 L577.9,14.1 M579.3,14.1 L584.4,118.7 L592.0,47.1 L597.8,97.8
|
||||
L605.4,46.5 L613.0,92.6 L620.7,65.8 L628.3,70.9 L636.0,96.0 L645.5,79.1 L653.2,64.1 L664.6,73.0
|
||||
L672.2,106.4 L681.8,50.3 L689.4,103.3 L699.0,45.0 L704.7,86.2 h0.01'/></g>
|
||||
<path d='M672.4,44.1 L707.9,44.1 M59.8,352.0 L66.1,352.0 L72.4,352.0 L78.8,352.0 L85.1,352.0 L91.4,352.0
|
||||
L97.7,352.0 L104.0,352.0 L110.3,352.0 L116.6,352.0 L122.9,352.0 L129.3,352.0 L135.6,352.0 L141.9,352.0
|
||||
L148.2,352.0 L154.5,352.0 L160.8,352.0 L167.1,352.0 L173.4,352.0 L179.8,352.0 L186.1,352.0 L192.4,352.0
|
||||
L198.7,352.0 L205.0,352.0 L211.3,352.0 L217.6,352.0 L223.9,352.0 L230.3,352.0 L236.6,352.0 L242.9,352.0
|
||||
L249.2,352.0 L255.5,352.0 L261.8,352.0 L268.1,352.0 L274.4,352.0 L280.8,352.0 L287.1,352.0 L293.4,352.0
|
||||
L299.7,352.0 L306.0,352.0 L312.3,351.2 L318.6,351.6 L324.9,352.0 L331.3,342.8 L337.6,315.2 L343.9,320.6
|
||||
L350.2,318.9 L359.7,310.0 L366.0,292.4 L372.3,288.1 L378.6,290.6 L384.9,286.1 L391.2,268.6 L400.7,247.2
|
||||
L407.0,253.1 L413.3,255.8 L419.6,222.6 L425.9,224.6 L435.4,215.1 L441.7,209.8 L448.0,243.9 L457.5,178.8
|
||||
L463.8,243.7 L470.1,211.1 L479.6,180.2 L485.9,215.2 L492.2,205.2 L501.7,143.7 L508.0,205.4 L514.3,207.3
|
||||
L523.8,120.6 L530.1,184.7 L536.4,186.2 L545.9,139.4 L552.2,191.1 L558.5,195.4 L568.0,91.2 L574.3,180.7
|
||||
L580.6,201.8 L590.1,77.1 L599.5,129.3 L611.5,14.1 M612.6,14.1 L621.6,155.8 L631.1,57.2 L640.6,91.9
|
||||
L650.0,81.3 L662.7,20.6 L669.0,130.8 L681.6,42.2 L691.1,57.4 L700.5,120.4 L707.9,14.1 M715.2,14.1
|
||||
L719.5,174.8 h0.01'/></g>
|
||||
</g>
|
||||
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
|
||||
<path d='M53.5,14.1 L53.5,370.0 L721.9,370.0 L721.9,14.1 L53.5,14.1 Z h0.01'/></g>
|
||||
<path d='M53.5,14.1 L53.5,352.0 L721.9,352.0 L721.9,14.1 L53.5,14.1 Z h0.01'/></g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
До Ширина: | Высота: | Размер: 11 KiB После Ширина: | Высота: | Размер: 11 KiB |