HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials

HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials (http://www.howtoforge.com/forums/index.php)
-   Technical (http://www.howtoforge.com/forums/forumdisplay.php?f=8)
-   -   php-fpm problems (http://www.howtoforge.com/forums/showthread.php?t=61593)

joemiller 24th April 2013 12:15

php-fpm problems [Solved]
 
Hi, I'm running web servers using Centos 6.4 with nginx and php-fpm.
php-fpm version is php-fpm-5.4.14-1.el6.remi.x86_64
I've started getting the following errors in my log files:
Code:

Apr 24 07:45:30 web kernel: php-fpm[2262]: segfault at 7fff14fba001 ip 000000000068524c sp 00007fff14fb41c0 error 6 in php-fpm[400000+34b000]
I also have about 300 php-fpm processes running and the server is very slow. I've tried restarting php-fpm and got the same results;

There are no errors shown in /var/logs/php-fpm/error.log or in /var/logs/php-fpm/www-error.log.

This is the contents of /etc/init.d/php-fpm;
Code:

#! /bin/sh
#
# chkconfig: - 84 16
# description:  PHP FastCGI Process Manager
# processname: php-fpm
# config: /etc/php-fpm.conf
# pidfile: /var/run/php-fpm/php-fpm.pid

# Standard LSB functions
#. /lib/lsb/init-functions

# Source function library.
. /etc/init.d/functions

# Check that networking is up.
. /etc/sysconfig/network

# Additional environment file
if [ -f /etc/sysconfig/php-fpm ]; then
      . /etc/sysconfig/php-fpm
fi

if [ "$NETWORKING" = "no" ]
then
        exit 0
fi

RETVAL=0
prog="php-fpm"
pidfile=${PIDFILE-/var/run/php-fpm/php-fpm.pid}
lockfile=${LOCKFILE-/var/lock/subsys/php-fpm}

start () {
        echo -n $"Starting $prog: "
        dir=$(dirname ${pidfile})
        [ -d $dir ] || mkdir $dir
        daemon --pidfile ${pidfile} php-fpm --daemonize
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch ${lockfile}
}
stop () {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile} php-fpm
        RETVAL=$?
        echo
        if [ $RETVAL -eq 0 ] ; then
                rm -f ${lockfile} ${pidfile}
        fi
}

restart () {
        stop
        start
}

reload () {
        echo -n $"Reloading $prog: "
        killproc -p ${pidfile} php-fpm -USR2
        RETVAL=$?
        echo
}


# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p ${pidfile} php-fpm
        RETVAL=$?
        ;;
  restart)
        restart
        ;;
  reload|force-reload)
        reload
        ;;
  condrestart|try-restart)
        [ -f ${lockfile} ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart}"
        RETVAL=2
        ;;
esac

exit $RETVAL

This is the contents of /etc/php-fpm.conf
Code:

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

; All relative paths in this configuration file are relative to PHP's install
; prefix.

; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
include=/etc/php-fpm.d/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Default Value: none
pid = /var/run/php-fpm/php-fpm.pid

; Error log file
; Default Value: /var/log/php-fpm.log
error_log = /var/log/php-fpm/error.log

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice

; If this number of child processes exit with SIGSEGV or SIGBUS within the time
; interval set by emergency_restart_interval then FPM will restart. A value
; of '0' means 'Off'.
; Default Value: 0
;emergency_restart_threshold = 0

; Interval of time used by emergency_restart_interval to determine when
; a graceful restart will be initiated.  This can be useful to work around
; accidental corruptions in an accelerator's shared memory.
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;emergency_restart_interval = 0

; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;process_control_timeout = 0

; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
; Default Value: yes
daemonize = yes

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;

; See /etc/php-fpm.d/*.conf

This is an example of the contents of /etc/php-fpm.d/web27.conf file. All other website.conf files are the same, the only thing which changes is the listening port.
Code:

[web27]

listen = 127.0.0.1:9036
listen.allowed_clients = 127.0.0.1

user = web27
group = client1

pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

chdir = /

php_admin_value[open_basedir] = /var/www/clients/client1/web27/web:/var/www/clients/client1/web27/tmp:/var/www/carlislemc.northernculture.co.uk/web:/srv/www/carlislemc.northernculture.co.uk/web:/usr/share/php5:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/usr/share/php
php_admin_value[session.save_path] = /var/www/clients/client1/web27/tmp
php_admin_value[upload_tmp_dir] = /var/www/clients/client1/web27/tmp

I have around 15 websites on the server, all fairly low traffic.
If I stop all php-fpm processes using
Code:

killall php-fpm
then the parts of my server that are running on ruby (Redmine) speed up to a normal speed
Can anyone suggest how I can fix this problem? It's slowing my webservers to a crawl!

joemiller 24th April 2013 18:08

Solved
 
I think I've managed to solve this myself by following the instructions here.

Changed php-fpm configuration for each website to
Code:

pm = dynamic
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200

then restarted php-fpm and nginx.


All times are GMT +2. The time now is 06:31.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, vBulletin Solutions, Inc.