2

I am attempting to debug a performance issue in my Laravel PHP application. I have Blackfire and JMeter installed on Debian 7 in a Apache / Postgres / PHP5-FPM / Redis stack.

If I run Blackfire normally, I get precisely what I want.

# blackfire --samples 5 curl http://larachan.foo
Profiling: [########################################] 5/5
Blackfire cURL completed
Profile URL: https://blackfire.io/profiles/xxx/graph

Wall Time     263ms
CPU Time      190ms
I/O Time     72.7ms
Memory       8.74MB
Network         n/a     n/a       -
SQL             n/a       -

I have a very, very simple JMeter test that does nothing but load my application's homepage as many times as it can. I am able to see performance degradation with the test running. Here is the UI for the Java applet.

JMeter Test Plan UI

Very simple.

So now if I run Blackfire with this test going, I get an error.

# blackfire --samples 5 curl http://larachan.foo
Profiling: [#########                                ] 2/5
Are you authorized to profile this page? No probe response, missing PHP extension or invalid signature for relaying agent.

That's no good. There is a very short, unhelpful message in the Blackfire agent log.

[2016-01-07T17:49:22-05:00] ERROR: Error while writing to probe: write unix @: broken pipe
[2016-01-07T17:49:22-05:00] ERROR: Profile data is truncated. Please check https://blackfire.io/doc/troubleshooting#trouble-no-response

A review of that documentation provides no information of use.

I have specified in my PHP-FPM Config file for Blackfire to timeout after 30 seconds. I have also asked it to put PHP related errors in a specific log file, but that never appears.

I can very accurately reproduce this problem even in the middle of a test. If I activate JMeter at any point during a 10 sample test (even if it's 1 test away from completion), it will bail out with the exact same error message.

Does anyone have any idea why this could happen?

Josh
  • 3,258
  • 2
  • 19
  • 31
  • You're basically DDOSing the response. It looks like Blackfire depends on the site being functional, and your DDOS prevents its requests from all getting through. – ceejayoz Jan 07 '16 at 23:21
  • @ceejayoz I can load the document fine, it just takes a second. Well below Blackfire's timeout threshold. – Josh Jan 07 '16 at 23:24
  • Your load test is continuous and even though you might be able to hit the app from a page, it looks like the blackfire needs to talk back to its 'agent'. However, agreed this is not good and either error should be clear or running in PHP should not cause this issue. Question : Is your CPU pegged ? Do you have any graphs of the server? – Richard Friedman Jan 09 '16 at 04:27

1 Answers1

1

With such a Jmeter plan, you are going to issue 8 concurrent requests, with no pause in between: like ceejayoz said, it is a kind of DOS.

Under these conditions, based on the errors you are getting, the probe seems not to be responsive enough.

I would start by adding a throughput controller, configuring 1 request/second/thread (or a similar value). Then you can run a check with a single thread. If it works, you can increase the number of threads and see where the problems begin.

I don't know much of Blackfire, but it seems tome more oriented to check page performances not load performances.

sbos61
  • 554
  • 2
  • 9