5

New Development

The core php error logs are below, but the site specific error logs show this. The memory on my php.ini file is :

memory_size 1024;

so it's not php's memory limit. I've also disabled all my plugin's, so it's not the memory limit that is on my security plugin.

2014/12/13 16:12:40 [error] 28264#0: *212 FastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 71 bytes) in /var/www/..


I am having troubles with a wordpress plugin running a full batch of imports. I get this error when I enable the nginx debug. The result is I get an immediate 404 error afterwards and I am unable to fully import my data.

I am pretty sure this is a bug, but I can't find the right answer to fix it.

Please Help.

What I have done so far:

  • It looked like a nginx bug and my nginx version was old, so I upgraded. No change.
  • It looked and still looks like it could be related to php-fpm. I've upgraded. No change.
  • I've disabled all of my plugins. No Change.

Server

  • CentOS 6.0
  • nginx v 1.0.15
  • PHP-FPM v 5.3.3 (fpm-fcgi)
  • Webserver running 3 very low traffic sites
  • PHP-FPM is set to ondemmand

PHP.ini config:

  • pm = ondemand
  • pm.process_idle_timeout = 50s
  • pm.max_children = 20
  • pm.start_servers = 1
  • pm.min_spare_servers = 3
  • pm.max_spare_servers = 5
  • pm.max_requests = 1024
  • pm.status_path = /status

I am unable to post my logs, so please check out the comparison

Nginx Log:

[12-Dec-2014 06:35:49.398315] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 1 spare children
[12-Dec-2014 06:35:50.399474] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 1 spare children
[12-Dec-2014 06:35:51.400765] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 1 spare children
[12-Dec-2014 06:35:52.402053] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 1 spare children
[12-Dec-2014 06:35:53.403346] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 1 spare children
[12-Dec-2014 06:35:53.417762] DEBUG: pid 13384, fpm_got_signal(), line 72: received SIGCHLD
[12-Dec-2014 06:35:53.417836] DEBUG: pid 13384, fpm_children_bury(), line 254: [pool www] child 18327 has been killed by the process managment after 52.123053 seconds from start
[12-Dec-2014 06:35:53.417863] DEBUG: pid 13384, fpm_event_loop(), line 411: event module triggered 1 events
[12-Dec-2014 06:35:54.404978] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 0 spare children
[12-Dec-2014 06:35:54.687559] DEBUG: pid 13384, fpm_children_make(), line 421: [pool www] child 18397 started




[12-Dec-2014 06:35:54.687593] DEBUG: pid 13384, fpm_pctl_on_socket_accept(), line 536: [pool www] got accept without idle child available .... I forked
[12-Dec-2014 06:35:54.687602] DEBUG: pid 13384, fpm_event_loop(), line 411: event module triggered 1 events




[12-Dec-2014 06:35:55.406455] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 1 spare children
[12-Dec-2014 06:35:56.407633] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 1 spare children
[12-Dec-2014 06:35:57.408949] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 1 spare children
[12-Dec-2014 06:35:58.410111] DEBUG: pid 13384, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 1 spare children

PHP log:

2014/12/12 06:35:02 [debug] 13350#0: *223 http header done
2014/12/12 06:35:54 [debug] 13350#0: accept on 0.0.0.0:80, ready: 1
2014/12/12 06:35:54 [debug] 13350#0: posix_memalign: 0000000002273A80:256 @16
2014/12/12 06:35:54 [debug] 13350#0: *226 accept: 66.249.67.123 fd:3
2014/12/12 06:35:54 [debug] 13350#0: *226 event timer add: 3: 60000:1418387814684
2014/12/12 06:35:54 [debug] 13350#0: *226 epoll add event: fd:3 op:1 ev:80000001
2014/12/12 06:35:54 [debug] 13350#0: accept() not ready (11: Resource temporarily unavailable)
2014/12/12 06:35:54 [debug] 13350#0: *226 malloc: 0000000002274AF0:1296
2014/12/12 06:35:54 [debug] 13350#0: *226 posix_memalign: 0000000002273BE0:256 @16
2014/12/12 06:35:54 [debug] 13350#0: *226 malloc: 000000000232F4B0:131072
2014/12/12 06:35:54 [debug] 13350#0: *226 posix_memalign: 00000000021F7590:4096 @16
2014/12/12 06:35:54 [debug] 13350#0: *226 http process request line
2014/12/12 06:35:54 [debug] 13350#0: *226 recv: fd:3 315 of 131072
2014/12/12 06:35:54 [debug] 13350#0: *226 http request line: "GET /stores/giltcity/page/78/ HTTP/1.1"
2014/12/12 06:35:54 [debug] 13350#0: *226 http uri: "/stores/giltcity/page/78/"
2014/12/12 06:35:54 [debug] 13350#0: *226 http args: ""
2014/12/12 06:35:54 [debug] 13350#0: *226 http exten: ""
2014/12/12 06:35:54 [debug] 13350#0: *226 http process request header line
2014/12/12 06:35:54 [debug] 13350#0: *226 http header: "Host: mydiscountman.com"
2014/12/12 06:35:54 [debug] 13350#0: *226 http header: "Connection: Keep-alive"
2014/12/12 06:35:54 [debug] 13350#0: *226 http header: "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
2014/12/12 06:35:54 [debug] 13350#0: *226 http header: "From: googlebot(at)googlebot.com"
2014/12/12 06:35:54 [debug] 13350#0: *226 http header: "Accept-Encoding: gzip,deflate"
2014/12/12 06:35:54 [debug] 13350#0: *226 http header: "User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
2014/12/12 06:35:54 [debug] 13350#0: *226 http header done
2014/12/12 06:37:11 [debug] 13350#0: accept on 0.0.0.0:80, ready: 1

Nginx Global Config /etc/nginx/nginx.conf :

user apache;
worker_processes 1;
pid /var/run/nginx.pid;


events {
worker_connections 768;
multi_accept on;
use epoll;
}

http {

# Let NGINX get the real client IP for its access logs
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;

# Basic Settings
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 20;
client_max_body_size 15m;
client_body_timeout 60;
client_header_timeout 60;
client_body_buffer_size  128k;
client_header_buffer_size 128k;
large_client_header_buffers 4 16k;
send_timeout 60;
reset_timedout_connection on;
types_hash_max_size 8192;
server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Logging Settings
# access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log debug;

# Log Format
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

# Gzip Settings
gzip on;
gzip_static on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 512;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/css text/javascript text/xml text/plain text/x-component 
application/javascript application/x-javascript application/json 
application/xml  application/rss+xml font/truetype application/x-font-ttf 
font/opentype application/vnd.ms-fontobject image/svg+xml;

# Virtual Host Configs
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

Nginx Site Config /etc/nginx/sites-available/testme :

server {
listen       80;
server_name  testme.XXXXXXX.com;

port_in_redirect off;
server_tokens off;
autoindex off;

client_max_body_size 15m;
client_body_buffer_size 128k;

access_log  /var/log/nginx/testme/access_log  main;
error_log   /var/log/nginx/testme/error_log;

root /var/www/testme;
index index.php  index.html index.htm;
try_files $uri $uri/ /index.php;

error_page  404              /404error.html;
location = /var/www/testme/404error.html {
    internal;
}

error_page  500              /500error.html;
location = /var/www/testme/500error.html {
    internal;
}

# Define default caching of 24h
expires 8s;
add_header Pragma public;
add_header Cache-Control "max-age=86400, public, must-revalidate, proxy-revalidate";

# Redirect server error pages to static 50x.html
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# Don't log robots.txt requests
location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

location /phpmyadmin {
auth_basic            "Restricted";
auth_basic_user_file  /var/www/testme/phpmyadmin/.htpasswd;
try_files $uri $uri/ index.html index.php;
index index.html index.htm index.php;
location ~ /\.ht {
    deny  all;
}
location ~* ^.+\.(css|js)$ {
    #try_files $uri $uri/;
    #root /var/www/testme/phpmyadmin;
    access_log off;
}
location ~ ^.+\.php {
    try_files $uri $uri/ *.php;
    fastcgi_split_path_info ^(.+.php)(.*)$;
    fastcgi_pass unix:/var/run/php-fpm.socket;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/testme$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_ignore_client_abort off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;

}
}

# Rewrite for versioned CSS+JS via filemtime
#    location ~* ^.+\.(css|js) {
#        rewrite ^(.+)\.(\d+)\.(css|js)$ $1.$3 last;
#        expires 31536000s;
#        access_log on;
#        log_not_found on;
#        add_header Pragma public;
#        add_header Cache-Control "max-age=31536000, public";
#    }

# Aggressive caching for static files
# If you alter static files often, please use 
# add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
location ~* \.    (asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|ogv|otf|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|t?gz|tif|tiff|ttf|wav|webm|wma|woff|wri|xla|xls|xlsx|xlt|xlw|zip)$ {
    expires 31536000s;
    access_log on;
    log_not_found on;
    add_header Pragma public;
    add_header Cache-Control "max-age=31536000, public";
}


location ~* (^(?!(?:(?!(php|inc)).)*/uploads/).*?(php)) {
set $php_root   $document_root;
    if ($request_uri ~* /phpmyadmin) {
    #set $php_root /usr/share;
    }

    try_files $uri = 404;
    fastcgi_split_path_info ^(.+.php)(.*)$;
    fastcgi_pass unix:/var/run/php-fpm.socket;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    fastcgi_intercept_errors on;
    fastcgi_ignore_client_abort off;
    fastcgi_connect_timeout 3600;
    fastcgi_send_timeout 3600;
    fastcgi_read_timeout 3600;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
  }

}

PHP.ini

    [PHP]

    ;;;;;;;;;;;;;;;;;;;
    ; Quick Reference ;
    ;;;;;;;;;;;;;;;;;;;

    error_reporting = E_ALL & ~E_NOTICE

    extension=apc.so

    ;;;;;;;;;;;;;;;;;;;;
    ; Language Options ;
    ;;;;;;;;;;;;;;;;;;;;

    engine = On
    short_open_tag = Off
    asp_tags = Off
    precision = 14
    y2k_compliance = On
    zlib.output_compression = Off
    implicit_flush = Off
    unserialize_callback_func =
    serialize_precision = 100

    safe_mode = Off
    safe_mode_gid = Off
    safe_mode_include_dir =
    safe_mode_exec_dir =
    safe_mode_allowed_env_vars = PHP_
    safe_mode_protected_env_vars = LD_LIBRARY_PATH
    disable_functions =
    disable_classes =
    realpath_cache_size = 16k
    realpath_cache_ttl = 120

    ;;;;;;;;;;;;;;;;;
    ; Miscellaneous ;
    ;;;;;;;;;;;;;;;;;

    expose_php = On

    ;;;;;;;;;;;;;;;;;;;
    ; Resource Limits ;
    ;;;;;;;;;;;;;;;;;;;

    max_execution_time = 600
    set_time_limit = 600
    max_input_time = 300
    memory_limit = 2048M

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Error handling and logging ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    error_reporting = E_ALL & ~E_DEPRECATED
    display_errors = Off
    display_startup_errors = Off
    log_errors = On
    log_errors_max_len = 1024
    ignore_repeated_errors = Off
    ignore_repeated_source = Off
    report_memleaks = On
    track_errors = Off
    html_errors = Off
    error_log = /var/log/php-fpm/www-error.log


    ;;;;;;;;;;;;;;;;;
    ; Data Handling ;
    ;;;;;;;;;;;;;;;;;

    variables_order = "GPCS"
    request_order = "GP"
    register_globals = Off
    register_long_arrays = Off
    register_argc_argv = Off
    auto_globals_jit = On
    post_max_size = 384M
    magic_quotes_gpc = Off
    magic_quotes_runtime = Off
    magic_quotes_sybase = Off
    auto_prepend_file =
    auto_append_file =
    default_mimetype = "text/html"

    ;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Paths and Directories ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;

    doc_root =
    user_dir =
    enable_dl = Off
    cgi.fix_pathinfo=0

    ;;;;;;;;;;;;;;;;
    ; File Uploads ;
    ;;;;;;;;;;;;;;;;

    file_uploads = On
    upload_max_filesize = 512M

    ;;;;;;;;;;;;;;;;;;
    ; Fopen wrappers ;
    ;;;;;;;;;;;;;;;;;;

    allow_url_fopen = On
    allow_url_include = Off
    default_socket_timeout = 120

    ;;;;;;;;;;;;;;;;;;;;;;
    ; Dynamic Extensions ;
    ;;;;;;;;;;;;;;;;;;;;;;

    ;;;;;;;;;;;;;;;;;;;
    ; Module Settings ;
    ;;;;;;;;;;;;;;;;;;;

    [Date]

    date.timezone = America/Chicago

    [filter]

    [iconv]

    [intl]

    [sqlite]

    [sqlite3]

    [Pcre]

    [Pdo]

    [Phar]

    [Syslog]

    define_syslog_variables  = Off

    [mail function]

    SMTP = localhost
    smtp_port = 25
    sendmail_path = /usr/sbin/sendmail -t -i
    mail.add_x_header = On

    [SQL]

    sql.safe_mode = Off

    [ODBC]

    odbc.allow_persistent = On
    odbc.check_persistent = On
    odbc.max_persistent = -1
    odbc.max_links = -1
    odbc.defaultlrl = 4096
    odbc.defaultbinmode = 1

    [MySQL]

    mysql.allow_persistent = On
    mysql.max_persistent = -1
    mysql.max_links = -1
    mysql.default_port =
    mysql.default_socket =
    mysql.default_host =
    mysql.default_user =
    mysql.default_password =
    mysql.connect_timeout = 300
    mysql.trace_mode = Off

    [MySQLi]

    mysqli.max_links = -1
    mysqli.default_port = 3306
    mysqli.default_socket =
    mysqli.default_host =
    mysqli.default_user =
    mysqli.default_pw =
    mysqli.reconnect = Off

    [PostgresSQL]

    pgsql.allow_persistent = On
    pgsql.auto_reset_persistent = Off
    pgsql.max_persistent = -1
    pgsql.max_links = -1
    pgsql.ignore_notice = 0
    pgsql.log_notice = 0

    [Sybase-CT]

    sybct.allow_persistent = On
    sybct.max_persistent = -1
    sybct.max_links = -1
    sybct.min_server_severity = 10
    sybct.min_client_severity = 10

    [bcmath]

    bcmath.scale = 0

    [browscap]

    [Session]

    session.save_handler = files
    session.save_path = "/var/lib/php/session"
    session.use_cookies = 1
    session.use_only_cookies = 1
    session.name = PHPSESSID
    session.auto_start = 0
    session.cookie_lifetime = 0
    session.cookie_path = /
    session.cookie_domain =
    session.cookie_httponly = 
    session.serialize_handler = php
    session.gc_probability = 1
    session.gc_divisor = 1000
    session.gc_maxlifetime = 1440
    session.bug_compat_42 = Off
    session.bug_compat_warn = Off
    session.referer_check =
    session.entropy_length = 0
    session.entropy_file =
    session.cache_limiter = nocache
    session.cache_expire = 180
    session.use_trans_sid = 0
    session.hash_function = 0
    session.hash_bits_per_character = 5
    url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

    [MSSQL]

    mssql.allow_persistent = On
    mssql.max_persistent = -1
    mssql.max_links = -1
    mssql.min_error_severity = 10
    mssql.min_message_severity = 10
    mssql.compatability_mode = Off
    mssql.timeout = 300
    mssql.secure_connection = Off




    [Tidy]

    tidy.clean_output = Off

    [soap]

    soap.wsdl_cache_enabled=1
    soap.wsdl_cache_dir="/tmp"
    soap.wsdl_cache_ttl=86400
  • can you add the nginx config? – xofer Dec 12 '14 at 17:07
  • I have no idea what the answer is, but I'd like to thank you for posting a great first question! – Hyppy Dec 12 '14 at 17:25
  • Thanks Hyppy! This is a tough one. Lots of moving pieces. – Thomas Dec 12 '14 at 19:25
  • so, the forking command is not a bug. The PHP process stopping 100% due to the child being killed is the fundamental problem. Why or how I am still unsure. Any ideas anyone? – Thomas Dec 13 '14 at 21:50
  • 1
    so it's not php's memory limit. You are drawing false conclusions. The error message says that PHP is running out of memory (at 256mb), the memory limit can be changed at runtime. There is no nginx or PHP fpm complexity/relevance here. – AD7six Dec 14 '14 at 13:47
0

The number of spare processes indicated in your logs clearly doesn't match your value for pm.min_spare_servers. That's probably because the php-fpm settings don't go in your php.ini file, they go in a fpm.conf file.

Given the lack of spare servers, it's no big surprise that you get a 'resource not available error'. I don't know why you'd get a 404 error though.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.