• Resolved alexp12

    (@alexp12)


    Last night 11.1.0 pushed automatically and crashed my website with error 500. Had to downgrade to 11.1.0 to work again.

     WooCommerce 11.1.0 — fatal memory exhaustion on nearly every request

    Environment
    - WordPress 7.1, PHP 8.4.25, Apache 2.4.58 (Ubuntu) via mod_proxy_fcgi/PHP-FPM, MariaDB
    - WooCommerce updated 11.0.1 → 11.1.0 via a background/automatic update
    - WP_MEMORY_LIMIT was 256M before the incident
    - Redis object cache active (redis-cache 2.8.0 drop-in)

    Timeline
    - Plugin files rewritten at 2026-09-04 00:07:46 (auto-update to 11.1.0)
    - First fatal error 4 seconds later:
    PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 528384 bytes)
    in wp-includes/class-wp-hook.php on line 340
    - From then on, virtually every subsequent front-end and wp-admin request fatal errored (1,800+ occurrences in a few hours), most consistently:
    PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 262144 bytes)
    in wp-content/plugins/woocommerce/src/Internal/Features/FeaturesController.php on line 294
    with related fatals also seen in wp-includes/plugin.php, wp-includes/option.php, wp-content/object-cache.php, and
    woocommerce/includes/tracks/class-wc-site-tracking.php.

    Ruled out "just needs more memory"
    Raising WP_MEMORY_LIMIT from 256M → 512M did not resolve it — the site simply exhausted the new 512M ceiling too (Allowed memory size of
    536870912 bytes exhausted), pointing to unbounded/runaway memory growth rather than a legitimately higher peak requirement.

    Not request-specific — reproducible via WP-CLI bootstrap alone
    Even a plain wp plugin install ... --force (no HTTP request involved) triggered the same runaway growth and got OOM-killed by the kernel
    (confirmed via dmesg: Out of memory: Killed process ... (php) ... anon-rss:3026440kB) simply from bootstrapping WordPress with WooCommerce
    11.1.0 active. Using --skip-plugins (which prevents WC from loading during bootstrap) avoided the issue, confirming the leak triggers during
    WooCommerce's normal plugin-load path, not a specific endpoint.

    Resolution
    Downgrading to WooCommerce 11.0.1 (wp plugin install woocommerce --version=11.0.1 --force) immediately and completely resolved the issue — no
    code or config changes, no memory limit changes retained, site has been stable since.

    Active plugins alongside WooCommerce (for reproduction context):
    webappick-product-feed-for-woocommerce 8.0.11, seo-by-rank-math 1.0.277.2, redis-cache 2.8.0, simple-cloudflare-turnstile 1.42.1,
    google-site-kit 1.186.0, transbank-webpay-plus-rest 1.14.0, wpforms-lite 2.0.1.1, wp-mail-smtp 4.9.0, wp-super-cache 3.1.3, plus several small
    in-house plugins.

    Website status output:

    <br>### WordPress Environment ###<br><br>WordPress address (URL): https://viareggio.cl<br>Site address (URL): https://viareggio.cl<br>WC Version: 11.0.1<br>Action Scheduler Version: ✔ 4.1.0<br>Log Directory Writable: ✔<br>WP Version: 7.1<br>WP Multisite: –<br>WP Memory Limit: 256 MB<br>WP Debug Mode: –<br>WP Cron: –<br>WP Environment Type: production<br>Language: es_CL<br>External object cache: ✔<br><br>### Server Environment ###<br><br>Server Info: Apache<br>Server Architecture: Linux 6.8.0-138-generic x86_64<br>PHP Version: 8.3.6<br>PHP Post Max Size: 8 MB<br>PHP Time Limit: 30<br>PHP Max Input Vars: 1000<br>cURL Version: 8.5.0<br>OpenSSL/3.0.13<br><br>SUHOSIN Installed: –<br>MySQL Version: 10.11.14-MariaDB-0ubuntu0.24.04.1<br>Max Upload Size: 2 MB<br>Default Timezone is UTC: ✔<br>fsockopen/cURL: ✔<br>SoapClient: ✔<br>DOMDocument: ✔<br>GZip: ✔<br>Multibyte String: ✔<br>Remote Post: ✔<br>Remote Get: ✔<br><br>### Database ###<br><br>WC Database Version: 11.1.0-1<br>WC Database Prefix: wp_<br>Tamaño total de la base de datos: 172.07MB<br>Tamaño de los datos de la base de datos: 86.13MB<br>Tamaño del índice de la base de datos: 85.94MB<br>wp_woocommerce_sessions: Datos: 1.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_woocommerce_api_keys: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_woocommerce_attribute_taxonomies: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_woocommerce_downloadable_product_permissions: Datos: 0.02MB + Índice: 0.08MB + Motor InnoDB<br>wp_woocommerce_order_items: Datos: 2.52MB + Índice: 1.94MB + Motor InnoDB<br>wp_woocommerce_order_itemmeta: Datos: 9.52MB + Índice: 8.02MB + Motor InnoDB<br>wp_woocommerce_tax_rates: Datos: 0.02MB + Índice: 0.06MB + Motor InnoDB<br>wp_woocommerce_tax_rate_locations: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_woocommerce_shipping_zones: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_woocommerce_shipping_zone_locations: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_woocommerce_shipping_zone_methods: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_woocommerce_payment_tokens: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_woocommerce_payment_tokenmeta: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_woocommerce_log: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_actionscheduler_actions: Datos: 2.02MB + Índice: 10.14MB + Motor InnoDB<br>wp_actionscheduler_claims: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_actionscheduler_groups: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_actionscheduler_logs: Datos: 1.02MB + Índice: 2.03MB + Motor InnoDB<br>wp_commentmeta: Datos: 0.17MB + Índice: 0.16MB + Motor InnoDB<br>wp_comments: Datos: 5.52MB + Índice: 12.13MB + Motor InnoDB<br>wp_ctxfeed_alerts: Datos: 0.02MB + Índice: 0.05MB + Motor InnoDB<br>wp_ctxfeed_metrics: Datos: 0.02MB + Índice: 0.05MB + Motor InnoDB<br>wp_gla_attribute_mapping_rules: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_gla_budget_recommendations: Datos: 0.19MB + Índice: 0.14MB + Motor InnoDB<br>wp_gla_merchant_issues: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_gla_merchant_price_benchmarks: Datos: 0.02MB + Índice: 0.05MB + Motor InnoDB<br>wp_gla_shipping_rates: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_gla_shipping_times: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_links: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_options: Datos: 3.03MB + Índice: 0.08MB + Motor InnoDB<br>wp_postmeta: Datos: 20.55MB + Índice: 9.03MB + Motor InnoDB<br>wp_posts: Datos: 4.52MB + Índice: 5.34MB + Motor InnoDB<br>wp_rank_math_404_logs: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_rank_math_internal_links: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_rank_math_internal_meta: Datos: 0.13MB + Índice: 0.00MB + Motor InnoDB<br>wp_termmeta: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_terms: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_term_relationships: Datos: 0.27MB + Índice: 0.16MB + Motor InnoDB<br>wp_term_taxonomy: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_transbank_api_service_log: Datos: 0.13MB + Índice: 0.00MB + Motor InnoDB<br>wp_transbank_execution_error_log: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_transbank_inscriptions: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_usermeta: Datos: 16.55MB + Índice: 19.06MB + Motor InnoDB<br>wp_users: Datos: 1.52MB + Índice: 0.70MB + Motor InnoDB<br>wp_vc_chatlog: Datos: 0.25MB + Índice: 0.08MB + Motor InnoDB<br>wp_vc_leads: Datos: 0.13MB + Índice: 0.05MB + Motor InnoDB<br>wp_wc_admin_notes: Datos: 0.05MB + Índice: 0.00MB + Motor InnoDB<br>wp_wc_admin_note_actions: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_wc_category_lookup: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_wc_customer_lookup: Datos: 1.52MB + Índice: 0.64MB + Motor InnoDB<br>wp_wc_download_log: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_wc_email_unsubscribes: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_wc_orders: Datos: 1.52MB + Índice: 1.89MB + Motor InnoDB<br>wp_wc_orders_meta: Datos: 4.52MB + Índice: 7.97MB + Motor InnoDB<br>wp_wc_order_addresses: Datos: 1.52MB + Índice: 0.94MB + Motor InnoDB<br>wp_wc_order_coupon_lookup: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_wc_order_operational_data: Datos: 1.52MB + Índice: 0.47MB + Motor InnoDB<br>wp_wc_order_product_lookup: Datos: 1.52MB + Índice: 1.45MB + Motor InnoDB<br>wp_wc_order_stats: Datos: 1.52MB + Índice: 0.58MB + Motor InnoDB<br>wp_wc_order_tax_lookup: Datos: 0.33MB + Índice: 0.27MB + Motor InnoDB<br>wp_wc_product_attributes_lookup: Datos: 0.02MB + Índice: 0.05MB + Motor InnoDB<br>wp_wc_product_download_directories: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_wc_product_meta_lookup: Datos: 0.25MB + Índice: 0.55MB + Motor InnoDB<br>wp_wc_rate_limits: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_wc_reserved_stock: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_wc_tax_rate_classes: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_wc_webhooks: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_webpay_rest_transactions: Datos: 0.19MB + Índice: 0.00MB + Motor InnoDB<br>wp_wpforms_analytics_forms: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_wpforms_analytics_snapshots: Datos: 0.02MB + Índice: 0.05MB + Motor InnoDB<br>wp_wpforms_logs: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_wpforms_payments: Datos: 0.02MB + Índice: 0.14MB + Motor InnoDB<br>wp_wpforms_payment_meta: Datos: 0.02MB + Índice: 0.05MB + Motor InnoDB<br>wp_wpforms_tasks_meta: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_wpmailsmtp_debug_events: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_wpmailsmtp_tasks_meta: Datos: 0.02MB + Índice: 0.00MB + Motor InnoDB<br>wp_yoast_indexable: Datos: 1.52MB + Índice: 0.59MB + Motor InnoDB<br>wp_yoast_indexable_hierarchy: Datos: 0.09MB + Índice: 0.16MB + Motor InnoDB<br>wp_yoast_migrations: Datos: 0.02MB + Índice: 0.02MB + Motor InnoDB<br>wp_yoast_primary_term: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br>wp_yoast_seo_links: Datos: 0.02MB + Índice: 0.03MB + Motor InnoDB<br><br>### Post Type Counts ###<br><br>attachment: 10403<br>googlesitekit_email: 14<br>page: 9<br>post: 3<br>product: 1875<br>product_variation: 297<br>revision: 158<br>shop_coupon: 1<br>shop_order_placehold: 4926<br>wp_global_styles: 3<br>wp_navigation: 1<br>wp_template: 4<br>wp_template_part: 6<br>wpforms: 2<br><br>### Security ###<br><br>Secure connection (HTTPS): ✔<br>Hide errors from visitors: ✔<br><br>### Active Plugins (19) ###<br><br>WooCommerce Chile RUT + Documento Tributario (Checkout Blocks): por  – 1.2.0<br>Envio Por Pagar: por Viareggio – 2.0.0<br>Site Kit by Google: por Google – 1.186.0<br>Redis Object Cache: por Till Krüss – 2.8.0<br>Rank Math SEO: por Rank Math SEO – 1.0.277.2<br>Simple CAPTCHA with Cloudflare Turnstile: por Elliot Sowersby<br>RelyWP – 1.42.1<br><br>Transbank Webpay: por TransbankDevelopers – 1.14.0<br>Viareggio Chatbot: por Viareggio – 1.52.0<br>Viareggio Khipu Blocks Gateway: por Viareggio – 1.0.0<br>Viareggio Order Statuses: por Migration Helper – 1.1.0<br>Viareggio Quick Order Notes: por Viareggio – 1.0.0<br>Viareggio SKU Checker: por Viareggio – 1.0.0<br>WooCommerce Dashboard Recent Orders Card: por Local – 1.4.0<br>WooCommerce Imprimir Pedido: por Viareggio – 1.0.0<br>CTX Feed: por WebAppick – 8.0.11<br>WooCommerce: por Automattic – 11.0.1 (la actualización a la versión 11.1.0 está disponible)<br>WP Mail SMTP: por WP Mail SMTP – 4.9.0<br>WP Super Cache: por Automattic – 3.1.3<br>WPForms Lite: por WPForms – 2.0.1.1<br><br>### Inactive Plugins (2) ###<br><br>TT5 Viareggio Layout (Search + Cats Popover + Cart): por Migration Helper – 1.2.0<br>WooCommerce khipu Gateway: por khipu – 4.0.2<br><br>### Dropin Plugins () ###<br><br>advanced-cache.php: advanced-cache.php<br>object-cache.php: Redis Object Cache Drop-In<br><br>### Must Use Plugins (4) ###<br><br>debug_ctx_price.php: por  –<br>Viareggio Login Branding: por  – 1.0.0<br>Viareggio Order Notes i18n: por  – 1.1.0<br>Viareggio Pickup Location i18n: por  – 1.0.0<br><br>### Settings ###<br><br>Force SSL: –<br>Currency: CLP ($)<br>Currency Position: left<br>Thousand Separator: .<br>Decimal Separator: ,<br>Number of Decimals: 0<br>Taxonomies: Product Types: external (external)<br>grouped (grouped)<br>simple (simple)<br>variable (variable)<br><br>Taxonomies: Product Visibility: exclude-from-catalog (exclude-from-catalog)<br>exclude-from-search (exclude-from-search)<br>featured (featured)<br>outofstock (outofstock)<br>rated-1 (rated-1)<br>rated-2 (rated-2)<br>rated-3 (rated-3)<br>rated-4 (rated-4)<br>rated-5 (rated-5)<br><br>Connected to WooCommerce.com: –<br>Enforce Approved Product Download Directories: ✔<br>HPOS feature enabled: ✔<br>Order datastore: Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableDataStore<br>HPOS data sync enabled: –<br>Enabled Features: analytics<br>marketplace<br>order_attribution<br>site_visibility_badge<br>hpos_fts_indexes<br>email_improvements<br>blueprint<br>point_of_sale<br>destroy-empty-sessions<br>push_notifications<br>custom_order_tables<br>cost_of_goods_sold<br><br><br>### Logging ###<br><br>Enabled: ✔<br>Handler: Automattic\WooCommerce\Internal\Admin\Logging\LogHandlerFileV2<br>Retention period: 30 días<br>Level threshold: –<br>Log directory size: 406 KB<br><br>### WC Pages ###<br><br>Base de la tienda: #8125 - /<br>Carrito: #8126 - /carrito/ -  Contiene el bloque woocommerce/cart<br>Finalizar compra: #10 - /checkout/ -  Contiene el bloque woocommerce/checkout<br>Mi cuenta: #11 - /my-account/ -  Contiene el shortcode &#091;woocommerce_my_account]<br>Términos y condiciones: #38092 - /terminos-y-condiciones/<br><br>### Theme ###<br><br>Name: Kiosko Child<br>Version: 1.0.7<br>Author URL: <br>Child Theme: ✔<br>Parent Theme Name: Kiosko<br>Parent Theme Version: 1.0.0<br>Parent Theme Author URL: https://automattic.com/<br>Theme type: Tema de bloques<br>WooCommerce Support: ✔<br><br>### Templates ###<br><br>Override: wp-content/themes/kiosko-child/woocommerce/emails/email-mobile-messaging.php ❌ Falta el encabezado de la versión. La versión principal es 7.0<br>Override: wp-content/themes/kiosko-child/woocommerce/myaccount/form-login.php<br>Override: wp-content/themes/kiosko/parts/mini-cart.html<br>Override: wp-content/themes/kiosko-child/templates/archive-product.html<br>Override: wp-content/themes/kiosko-child/templates/page-checkout.html<br>Override: wp-content/themes/kiosko/templates/product-search-results.html<br>Override: wp-content/themes/kiosko-child/templates/single-product.html<br><br>### Admin ###<br><br>Enabled Features: activity-panels<br>analytics<br>analytics-scheduled-import<br>experimental-iapi-mini-cart<br>coupons<br>core-profiler<br>customize-store<br>customer-effort-score-tracks<br>import-products-task<br>experimental-fashion-sample-products<br>shipping-smart-defaults<br>shipping-setting-tour<br>homescreen<br>marketing<br>mobile-app-banner<br>onboarding<br>onboarding-tasks<br>pattern-toolkit-full-composability<br>product-custom-fields<br>remote-inbox-notifications<br>remote-free-extensions<br>payment-gateway-suggestions<br>printful<br>shipping-label-banner<br>subscriptions<br>store-alerts<br>transient-notices<br>woo-mobile-welcome<br>wc-pay-promotion<br>wc-pay-welcome-page<br>launch-your-store<br><br>Disabled Features: product-data-views<br>experimental-blocks<br>minified-js<br>settings-ui<br>rest-api-v4<br>order-detail-redesign<br>product-variations-classic-redesign<br><br>Daily Cron: ❌ No planificado<br>Options: ✔<br>Notes: 48<br>Onboarding: completed<br><br>### Action Scheduler ###<br><br>Completar: 2,833<br>Oldest: 2026-08-03 17:03:18 -0400<br>Newest: 2026-09-04 11:29:33 -0400<br><br>Fallida: 21<br>Oldest: 2026-07-16 01:46:36 -0400<br>Newest: 2026-08-21 09:32:09 -0400<br><br>Pendiente: 20<br>Oldest: 2026-09-04 11:44:33 -0400<br>Newest: 2026-09-12 12:02:46 -0300<br><br><br>### Status report information ###<br><br>Generated at: 2026-09-04 11:38:01 -04:00<br>

    The page I need help with: [log in to see the link]

Viewing 1 replies (of 1 total)
  • Thread Starter alexp12

    (@alexp12)

    Solved, this was the root cause:


    The active child theme contained a global gettext filter that changed text on the WooCommerce My Account address endpoint:

    add_filter( 'gettext', function ( $translated, $text, $domain ) {
    if (
    is_admin()
    || ! function_exists( 'is_wc_endpoint_url' )
    || ! is_wc_endpoint_url( 'edit-address' )
    ) {
    return $translated;
    }

    // Translation customization...
    }, 20, 3 );

    This worked with WooCommerce 11.0.1. Under 11.1.0, calling is_wc_endpoint_url() during early translation initialization produced this recursive path:

    Child-theme gettext callback
    -> is_wc_endpoint_url()
    -> WC_Query::get_query_vars()
    -> woocommerce_get_query_vars filter
    -> OrderWithdrawalController::add_query_var()
    -> FeaturesUtil::feature_is_enabled()
    -> FeaturesController::init_feature_definitions()
    -> translation function / gettext
    -> child-theme gettext callback
    -> repeat

    WooCommerce 11.1.0’s Order Withdrawal controller adds logic to woocommerce_get_query_vars. Its feature check initializes the WooCommerce feature definitions, whose labels are translated. That invokes the theme’s gettext filter again before the original call has completed.

    The recursion continues until PHP exhausts its memory limit.

    The theme callback was unsafe because it called a query-dependent conditional from gettext before the wp action. Adding the lifecycle guard fixes that theme behavior.

      However, WooCommerce 11.1.0 exposes the issue through a new recursive route involving OrderWithdrawalController, woocommerce_get_query_vars, feature initialization, and translation. Could WooCommerce consider adding a re-entrancy guard or avoiding translated feature initialization from  within the query-variable filter? That could prevent similar third-party translation callbacks from causing unbounded recursion and full-site HTTP 500 failures.

    Applied workaround:



      The callback was changed so it does not query WooCommerce endpoints until WordPress has completed its main query:

      add_filter( 'gettext', function ( $translated, $text, $domain ) {

          if (

              is_admin()

              || ! did_action( 'wp' )

              || ! function_exists( 'is_wc_endpoint_url' )

              || ! is_wc_endpoint_url( 'edit-address' )

          ) {

              return $translated;

          }

          // Translation customization...

      }, 20, 3 );

      After applying this guard, WooCommerce 11.1.0 was installed successfully.

Viewing 1 replies (of 1 total)

You must be logged in to reply to this topic.