Will enabling XDebug on a production server make PHP slower?

后端 未结 11 1449
孤独总比滥情好
孤独总比滥情好 2020-11-28 12:47

The title pretty much says it all...is it a bad idea ? I\'d like to have the enhanced debug messages that XDebug provides on the server.

[edit] Just to make things c

相关标签:
11条回答
  • 2020-11-28 12:56

    Besides the obvious fact that debug messages cannot be displayed in a application that is already in production, and also the fact that I don't know why would you like that, there a couple of things really bad about it.

    The first one is that when you add debugging behavior to your server, the debug engine "attaches" to the PHP process and receive messages of the engine to stop at breakpoints, and this is BAD, because introduces a high performance blow to have another process stopping or "retaining" the PHP parser.

    Another big issue is that when a debugger is installed, at least most of them, they tend to have the nasty habit of opening ports in your server, because they are not intended for production environments, and as you may know, any software that opens ports in your server is opening a door for any hacker around.

    If you need to have debugging in your code, then in your application, implement a debugging system, if is not available, since most frameworks have this built in. Set a configuration value, say DEBUG_ENABLED and when throwing exceptions, if is not enabled, redirect to a petty page, else to a ugly page with debugging information, but take good care of what debugging information you display in your server. I hope this clarifies everything.

    EDIT As apparently my response is not documented enough, you should check these sources

    • PHPs XDebug tracing overhead in production
    • Careful: XDebug can skew your performance numbers

    Finally, there is one thing I didn't said as I thought it was sort of implicit: It's common sense not do it! You don't put debugging instruments on your production server for the same reason that you keep them on a different environment, because you need to keep unnecessary stuff away from it. Any process running on a server, no matter how light it is, will impact your performance.

    0 讨论(0)
  • 2020-11-28 12:58

    Why on earth do you want something like that? Debug before you deploy to production. It will make the app slower.

    0 讨论(0)
  • 2020-11-28 13:00

    I know this is an old post, but since the issue with Xdebug is still there 10 years on, I'd like to point to the relevant bug report (closed as WONTFIX NOTABUG): https://bugs.xdebug.org/view.php?id=1668

    Tl;dr:

    Just installing xdebug will (on linux @least) slow all php on the site to a crawl, with hits anywhere from 2x to 20x, even if all flags are set to OFF. DO NOT INSTALL xdebug IN PRODUCTION - EVER. Better yet, investigate less intrusive debug options.

    0 讨论(0)
  • 2020-11-28 13:01

    Xdebug is for adding full stack traces to error logs, that is the display_errors ini value, which of course should be Off (even in development I dont want this). It does not allow remote attachment to a debugger unless you enable the remote_attach ini setting. While it is slower, if you have a PHP mystery error like Max memory allocated or Segmentation fault, this is the only way you will see where it actually hapenned.

    0 讨论(0)
  • 2020-11-28 13:02

    You should never display debug error messages on a production server. It's ugly for your users and also a security risk. I'm sure it will make it a little slower too.

    0 讨论(0)
  • 2020-11-28 13:03

    I tested the performance impact using this php benchmark tool. Disclaimer I built the tool.

    The answer is the xdebug module significantly slows down code execution: from 2x to 7x times depending on the test. Here are my results:

    # env information
    php version        :     7.4.5
    platform           : WINNT x64
    
    # disable xdebug extension in php.ini
    $ php src/benchmark.php --iterations 1000 --time-per-iteration 50 --save xdebug_off
    
    # enable xdebug extension
    $ php src/benchmark.php --iterations 1000 --time-per-iteration 50 --save xdebug_on
    
    # compare
    $ php src/compare.php --file1 benchmark_xdebug_off_20201127-0946.txt --file2 benchmark_xdebug_on_20201127-0939.txt
    ------------------------------------------------
    test_math                  OFF       ON
    mean               :      3762      531   -85.9%
    median             :      4226      568   -86.6%
    mode               :      4655      596   -87.2%
    minmum             :       918      188   -79.5%
    maximum            :      4722      612   -87.0%
    quartile 1         :      3081      490   -84.1%
    quartile 3         :      4580      595   -87.0%
    IQ range           :      1498      105   -93.0%
    std deviation      :       984       87   -91.1%
    normality          :     11.0%    11.0%
    ------------------------------------------------
    test_strings
    mean               :      1419      677   -52.3%
    median             :      1521      688   -54.7%
    mode               :      1580      974   -38.4%
    minmum             :       537       90   -83.2%
    maximum            :      1629     1071   -34.3%
    quartile 1         :      1319      452   -65.7%
    quartile 3         :      1582      892   -43.6%
    IQ range           :       262      440    67.8%
    std deviation      :       226      248     9.8%
    normality          :      6.6%     6.6%
    ------------------------------------------------
    test_loops
    mean               :      8131     1208   -85.1%
    median             :      8617     1240   -85.6%
    mode               :      9109     1407   -84.6%
    minmum             :      3167      589   -81.4%
    maximum            :      9666     1435   -85.2%
    quartile 1         :      7390     1116   -84.9%
    quartile 3         :      9253     1334   -85.6%
    IQ range           :      1863      217   -88.3%
    std deviation      :      1425      164   -88.4%
    normality          :      5.6%     5.6%
    ------------------------------------------------
    test_if_else
    mean               :    279630    31263   -88.8%
    median             :    293553    31907   -89.1%
    mode               :    303706    37696   -87.6%
    minmum             :    104279    12560   -88.0%
    maximum            :    322143    37696   -88.3%
    quartile 1         :    261977    28386   -89.2%
    quartile 3         :    307904    34773   -88.7%
    IQ range           :     45927     6387   -86.1%
    std deviation      :     39034     4405   -88.7%
    normality          :      4.7%     4.7%
    ------------------------------------------------
    test_arrays
    mean               :      5705     3275   -42.6%
    median             :      5847     3458   -40.9%
    mode               :      6040     3585   -40.6%
    minmum             :      3366     1609   -52.2%
    maximum            :      6132     3645   -40.6%
    quartile 1         :      5603     3098   -44.7%
    quartile 3         :      5965     3564   -40.3%
    IQ range           :       361      465    28.8%
    std deviation      :       404      394    -2.5%
    normality          :      2.4%     2.4%
    ------------------------------------------------
    
    0 讨论(0)
提交回复
热议问题