php-fpm problems

Discussion in 'Technical' started by joemiller, Apr 24, 2013.

  1. joemiller

    joemiller New Member

    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!
     
    Last edited: Apr 24, 2013
  2. joemiller

    joemiller New Member

    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.
     

Share This Page