6

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 
11
  • can you add the nginx config? Commented Dec 12, 2014 at 17:07
  • I have no idea what the answer is, but I'd like to thank you for posting a great first question! Commented Dec 12, 2014 at 17:25
  • Thanks Hyppy! This is a tough one. Lots of moving pieces. Commented Dec 12, 2014 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? Commented Dec 13, 2014 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. Commented Dec 14, 2014 at 13:47

1 Answer 1

1

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.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.