Ok i ran siege, with 200 concurrent connections / internet = true, and
i gave it a list of urls to access. After about 3 4 minutes, php
processes are in sbwait state, and the final message is gateway timeout.
The only thing i could get from php-fpm.conf. No other error messages.
Sep 29 02:22:13.203711 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD
Sep 29 02:22:13.383918 [WARNING] fpm_children_bury(), line 215: child
82480 (pool nginx) exited on signal 9 SIGKILL after 664.244869 seconds
from start
On 9/28/2010 8:25 PM, Jonathan Langevin wrote:
> You may be able to replicate the problem by running siege against the
> webserver.
> I typically set up a known heavy PHP page (you can also provide a list
> of urls, accessed randomly) to be the target. It's good at least for
> getting an idea of how many concurrent connections you can handle.
>
> http://www.joedog.org/index/siege-home
>
> On Tue, Sep 28, 2010 at 2:16 PM, StefanitaRares Dumitrescu
> <themediaplanet90210@gmail.com <mailto:themediaplanet90210@gmail.com>>
> wrote:
>
> I upgraded to the latest php 5.2 - 5.2.14 with php-fpm 0.5.14,
> just to take the "old version thing" out of equation.
>
> I have made a few small modifications, to the php-fpm.conf, i
> increased the number of minservers and max servers and start
> servers. The traffic is lower now so i cannot really know for sure
> this is works, as the php crash/hang usually happens during the day.
>
> I also decreased the number of nginx workers to 8 instead of 64,
> as i think it made no sense to have 64, considering i have 4 cores
> with HT.
>
>
> Used with any pm_style.
> <value name="max_children">256</value>
> Settings group for 'apache-like'
> pm style
> <value name="apache_like">
> Sets the number of server
> processes created on startup.
> Used only when
> 'apache-like' pm_style is selected
> <value name="StartServers">64</value>
>
> Sets the desired minimum
> number of idle server processes.
> Used only when
> 'apache-like' pm_style is selected
> <value name="MinSpareServers">128</value>
>
> Sets the desired maximum
> number of idle server processes.
> Used only when
> 'apache-like' pm_style is selected
> <value name="MaxSpareServers">256</value>
> </value>
> </value>
>
>
>
> On 9/28/2010 7:38 PM, Jonathan Langevin wrote:
>> My apologies on versions, I missed that in my follow-up.
>>
>> On Tue, Sep 28, 2010 at 1:37 PM, StefanitaRares Dumitrescu
>> <themediaplanet90210@gmail.com
>> <mailto:themediaplanet90210@gmail.com>> wrote:
>>
>> I already specified the versions of everything in the first
>> post. php 5.2.10 / nginx latest - 0.8.52.
>>
>> I am going to check the debug options about now.
>>
>> On 9/28/2010 7:31 PM, Jonathan Langevin wrote:
>>> What versions of nginx, php, and fpm are you running?
>>> It appears to be older versions, due to the configurations
>>> that you have in place.
>>>
>>> Try setting (in FPM config):
>>> catch_workers_output = yes
>>> log_level = debug
>>>
>>> I believe your version of FPM will have to have been
>>> compiled with debugging enabled for that log level to function.
>>> I'm also not certain catch_workers_output will function for
>>> you or not, but I do know that since that setting has been
>>> enabled (which I changed at the same time that I changed to
>>> APC), I have not seen the same errors again.
>>>
>>> Be warned, debug log level is extremely verbose, expect logs
>>> to grow exponentially.
>>>
>>> -Jon
>>>
>>> On Tue, Sep 28, 2010 at 1:21 PM, StefanitaRares Dumitrescu
>>> <themediaplanet90210@gmail.com
>>> <mailto:themediaplanet90210@gmail.com>> wrote:
>>>
>>> I tried APC prior to eAccelerator, and i had the same
>>> issues. It actually happened more often for php to hang
>>> than now with eaccelerator.
>>>
>>>
>>> On 9/28/2010 7:19 PM, Jonathan Langevin wrote:
>>>> I was experiencing similar issues recently.
>>>> Changed my opcode cache to APC, haven't seen the same
>>>> problem since.
>>>>
>>>> Try APC and see if you still have the same issues.
>>>>
>>>> -Jon
>>>>
>>>> On Tue, Sep 28, 2010 at 1:15 PM, katmai
>>>> <themediaplanet90210@gmail.com
>>>> <mailto:themediaplanet90210@gmail.com>> wrote:
>>>>
>>>> Hi guys,
>>>>
>>>> I am running a very busy website. It's running a
>>>> photo gallery ->
>>>> Gallery2.
>>>>
>>>> The system is a Quad core Xeon, with 16 gb RAM, and
>>>> separate drives
>>>> for OS/SQL/site, running FreeBSD 7.2 - latest patch
>>>> level.
>>>>
>>>> At some point during the day, pretty much random,
>>>> the load on the
>>>> server spikes, and then php processing stops. I run
>>>> nginx 0.8.52, and
>>>> php 5.2.10 with fpm patch, and i am using
>>>> eAccelerator as an opcode
>>>> cache.
>>>>
>>>> I have been debugging and i noticed that when the
>>>> server reaches over
>>>> 6000 active connections, then everything gets
>>>> clogged and eventually i
>>>> had to build a script that would restart php/nginx
>>>> when the load
>>>> starts spiking, which is not quite a nice solution.
>>>> I don't like doing
>>>> patchwork like this, but i had to.
>>>>
>>>> The behavior i noticed was when the php started
>>>> dieing, then all php
>>>> processes would be in "pfault" or "sbwait" state.
>>>>
>>>> If you need any more infos i will be happy to
>>>> provide. i just want to
>>>> know what may be the cause of this.
>>>>
>>>> Information:
>>>> 1 - This is what nginx_status page shows when php
>>>> is close to dieing.
>>>>
>>>> Active connections: 5018
>>>> server accepts handled requests
>>>> 11836 11836 28147
>>>> Reading: 49 Writing: 2103 Waiting: 2866
>>>>
>>>> 2 - my php-fpm.conf
>>>>
>>>>
>>>> <?xml version="1.0" ?>
>>>> <configuration>
>>>>
>>>> All relative paths in this config are
>>>> relative to php's
>>>> install prefix
>>>>
>>>> <section name="global_options">
>>>>
>>>> Pid file
>>>> <value name="pid_file">/usr/local/kphp/logs/php-
>>>> fpm.pid</value>
>>>>
>>>> Error log file
>>>> <value name="error_log">/usr/local/kphp/logs/php-
>>>> fpm.log</value>
>>>>
>>>> Log level
>>>> <value name="log_level">notice</value>
>>>>
>>>> When this amount of php processes
>>>> exited with SIGSEGV
>>>> or SIGBUS ...
>>>> <value name="emergency_restart_threshold">10</value>
>>>>
>>>> ... in a less than this interval of
>>>> time, a graceful
>>>> restart will be initiated.
>>>> Useful to work around accidental
>>>> curruptions in
>>>> accelerator's shared memory.
>>>> <value name="emergency_restart_interval">1m</value>
>>>>
>>>> Time limit on waiting child's
>>>> reaction on signals from
>>>> master
>>>> <value name="process_control_timeout">5s</value>
>>>>
>>>> Set to 'no' to debug fpm
>>>> <value name="daemonize">yes</value>
>>>>
>>>> </section>
>>>>
>>>> <workers>
>>>>
>>>> <section name="pool">
>>>>
>>>> Name of pool. Used in logs
>>>> and stats.
>>>> <value name="name">nginx</value>
>>>>
>>>> Address to accept fastcgi
>>>> requests on.
>>>> Valid syntax is
>>>> 'ip.ad.re.ss:port' or just
>>>> 'port' or '/path/to/unix/socket'
>>>> <value name="listen_address">127.0.0.1:8000
>>>> http://127.0.0.1:8000</
>>>> value>
>>>>
>>>> <value name="listen_options">
>>>>
>>>> Set listen(2) backlog
>>>> <value name="backlog">-1</value>
>>>>
>>>> Set permissions for
>>>> unix socket, if
>>>> one used.
>>>> In Linux read/write
>>>> permissions must
>>>> be set in order to allow connections from web server.
>>>> Many BSD-derrived
>>>> systems allow
>>>> connections regardless of permissions.
>>>> <value name="owner"></value>
>>>> <value name="group"></value>
>>>> <value name="mode">0666</value>
>>>> </value>
>>>>
>>>> Additional php.ini defines,
>>>> specific to this
>>>> pool of workers.
>>>> <value name="php_defines">
>>>> <!-- <value name="sendmail_path">/usr/sbin/
>>>> sendmail -t -i</value> -->
>>>> <!-- <value name="display_errors">0</
>>>> value>
>>>> -->
>>>> </value>
>>>>
>>>> Unix user of processes
>>>> <value name="user">nobody</value>
>>>>
>>>> Unix group of processes
>>>> <value name="group">nobody</value>
>>>>
>>>> Process manager settings
>>>> <value name="pm">
>>>>
>>>> Sets style of
>>>> controling worker
>>>> process count.
>>>> Valid values are
>>>> 'static' and 'apache-
>>>> like'
>>>> <value name="style">static</value>
>>>>
>>>> Sets the limit on
>>>> the number of
>>>> simultaneous requests that will be served.
>>>> Equivalent to Apache
>>>> MaxClients
>>>> directive.
>>>> Equivalent to
>>>> PHP_FCGI_CHILDREN
>>>> environment in original php.fcgi
>>>> Used with any pm_style.
>>>> <value name="max_children">256</value>
>>>>
>>>> Settings group for
>>>> 'apache-like' pm
>>>> style
>>>> <value name="apache_like">
>>>>
>>>> Sets the
>>>> number of server
>>>> processes created on startup.
>>>> Used only
>>>> when 'apache-like'
>>>> pm_style is selected
>>>> <value name="StartServers">32</
>>>> value>
>>>>
>>>> Sets the
>>>> desired minimum
>>>> number of idle server processes.
>>>> Used only
>>>> when 'apache-like'
>>>> pm_style is selected
>>>> <value
>>>> name="MinSpareServers">64</value>
>>>>
>>>> Sets the
>>>> desired maximum
>>>> number of idle server processes.
>>>> Used only
>>>> when 'apache-like'
>>>> pm_style is selected
>>>> <value
>>>> name="MaxSpareServers">128</value>
>>>>
>>>> </value>
>>>>
>>>> </value>
>>>>
>>>> The timeout (in seconds) for
>>>> serving a single
>>>> request after which the worker process will be
>>>> terminated
>>>> Should be used when
>>>> 'max_execution_time' ini
>>>> option does not stop script execution for some reason
>>>> '0s' means 'off'
>>>> <value name="request_terminate_timeout">0s</
>>>> value>
>>>>
>>>> The timeout (in seconds) for
>>>> serving of single
>>>> request after which a php backtrace will be dumped
>>>> to slow.log file
>>>> '0s' means 'off'
>>>> <value name="request_slowlog_timeout">10s</
>>>> value>
>>>>
>>>> The log file for slow requests
>>>> <value name="slowlog">logs/slow.log</value>
>>>>
>>>> Set open file desc rlimit
>>>> <value name="rlimit_files">8092</value>
>>>>
>>>> Set max core size rlimit
>>>> <value name="rlimit_core">0</value>
>>>>
>>>> Chroot to this directory at
>>>> the start,
>>>> absolute path
>>>> <value name="chroot"></value>
>>>>
>>>> Chdir to this directory at
>>>> the start, absolute
>>>> path
>>>> <value name="chdir"></value>
>>>>
>>>> Redirect workers' stdout and
>>>> stderr into main
>>>> error log.
>>>> If not set, they will be
>>>> redirected to /dev/
>>>> null, according to FastCGI specs
>>>> <value name="catch_workers_output">yes</value>
>>>>
>>>> How much requests each
>>>> process should execute
>>>> before respawn.
>>>> Useful to work around memory
>>>> leaks in 3rd
>>>> party libraries.
>>>> For endless request
>>>> processing please specify
>>>> 0
>>>> Equivalent to
>>>> PHP_FCGI_MAX_REQUESTS
>>>> <value name="max_requests">500</value>
>>>>
>>>> Comma separated list of ipv4
>>>> addresses of
>>>> FastCGI clients that allowed to connect.
>>>> Equivalent to
>>>> FCGI_WEB_SERVER_ADDRS
>>>> environment in original php.fcgi (5.2.2+)
>>>> Makes sense only with
>>>> AF_INET listening
>>>> socket.
>>>> <value name="allowed_clients">127.0.0.1</
>>>> value>
>>>>
>>>> Pass environment variables like
>>>> LD_LIBRARY_PATH
>>>> All $VARIABLEs are taken
>>>> from current
>>>> environment
>>>> <value name="environment">
>>>> <value name="HOSTNAME">$HOSTNAME</
>>>> value>
>>>> <value name="PATH">/usr/local/bin:/usr/
>>>> bin:/bin</value>
>>>> <value name="TMP">/tmp</value>
>>>> <value name="TMPDIR">/tmp</value>
>>>> <value name="TEMP">/tmp</value>
>>>> <value name="OSTYPE">$OSTYPE</value>
>>>> <value name="MACHTYPE">$MACHTYPE</
>>>> value>
>>>> <value name="MALLOC_CHECK_">2</value>
>>>> </value>
>>>>
>>>> </section>
>>>>
>>>> </workers>
>>>>
>>>> </configuration>
>>>>
>>>> 3 - the relevant portion of nginx config:
>>>>
>>>> user nobody;
>>>> worker_processes 64;
>>>> worker_rlimit_nofile 10240;
>>>>
>>>> error_log logs/error.log;
>>>> pid logs/nginx.pid;
>>>>
>>>> events {
>>>> worker_connections 8192;
>>>> use kqueue;
>>>> }
>>>>
>>>> [...............................]
>>>>
>>>> location ~* \.php$ {
>>>> fastcgi_pass 127.0.0.1:8000
>>>> http://127.0.0.1:8000;
>>>> fastcgi_index index.php;
>>>> fastcgi_param SCRIPT_FILENAME
>>>> /xdrive/cityv3/
>>>> public_html$fastcgi_script_name;
>>>> fastcgi_param SCRIPT_NAME
>>>> $fastcgi_script_name;
>>>> fastcgi_param REQUEST_URI
>>>> $request_uri;
>>>> fastcgi_param DOCUMENT_URI
>>>> $document_uri;
>>>> fastcgi_param DOCUMENT_ROOT
>>>> $document_root;
>>>> fastcgi_param QUERY_STRING
>>>> $query_string;
>>>> fastcgi_param REQUEST_METHOD
>>>> $request_method;
>>>> fastcgi_param CONTENT_TYPE
>>>> $content_type;
>>>> fastcgi_param CONTENT_LENGTH
>>>> $content_length;
>>>> fastcgi_param GATEWAY_INTERFACE
>>>> CGI/1.1;
>>>> fastcgi_param SERVER_SOFTWARE
>>>> nginx;
>>>> fastcgi_param REMOTE_ADDR
>>>> $remote_addr;
>>>> fastcgi_param REMOTE_PORT
>>>> $remote_port;
>>>> fastcgi_param SERVER_ADDR
>>>> $server_addr;
>>>> fastcgi_param SERVER_PORT
>>>> $server_port;
>>>> fastcgi_param SERVER_NAME
>>>> $server_name;
>>>> fastcgi_param SERVER_PROTOCOL
>>>> $server_protocol;
>>>>
>>>> fastcgi_buffers 64 64k;
>>>> fastcgi_buffer_size 64k;
>>>>
>>>>
>>>
>>>
>>
>>
>
>