当发送时事通讯时--不是用WordPress--服务器有100%的CPU

时间:2014-09-10 作者:kanenas

将新闻稿(不是使用wordpress,而是使用其他外部新闻稿活动工具)发送到3,298 recipients, 我们有独特的开放:155, 服务器有太多httpd实例和mysql的100%cpu。

专用机器
CentOS Linux 6.5
Linux 2.6.32-431.17.1。el6。x86\\u 64上的x86\\u 64 Webmin版本:1.701处理器:4实际内存:总计15.57 GB虚拟内存:总计4 GB Apache/2.2.15(保持活动状态)
MySQL v.5.1.73-logAPC Stats

WordPress 3.9.2运行铲斗(http://themeforest.net/item/bucket-a-digital-magazine-style-wordpress-theme/6107209) 子主题
数据库大小=1.6 GB
wp\\u posts=118999(行)
wp\\u postmeta=1656568(行)

WordPress插件正在运行。其他图像大小(zui)
2。联系表格7。自定义用户配置文件照片4。论文评论系统。谷歌WordPress分析6。专业新闻稿7。Photorati的下一个画廊8。下一篇报道:社交网络汽车海报。P3(插件性能分析器)
10。像素码
11。像素类型
12。Post title字幕滚动条13。UBM溢价
14。Vixy YouTube嵌入15。W3总缓存(启用APC)
16。Wordfence安全性17。WP优化
18。另一个相关帖子插件

从…起wp-confing.php

/** Enable W3 Total Cache */  
define(\'WP_CACHE\', true); // Added by W3 Total Cache  
/** Enable W3 Total Cache */  

define( \'AUTOMATIC_UPDATER_DISABLED\', true );  
define(\'DISABLE_WP_CRON\', true);  
define( \'DISALLOW_FILE_EDIT\', true );  

define(\'WP_MEMORY_LIMIT\', \'256M\');  
define(\'WP_MAX_MEMORY_LIMIT\', \'512M\');  
MySQLTuner脚本的结果

MySQLTuner 1.3.0 - Major Hayden <[email protected]>  
Run with \'--help\' for additional options and output filtering  
[OK] Currently running supported MySQL version 5.1.73-log  
[OK] Operating on 64-bit architecture  

-------- Storage Engine Statistics -------------------------------------------  
[--] Status: +CSV +InnoDB +MRG_MYISAM  
[--] Data in MyISAM tables: 442M (Tables: 25)  
[--] Data in InnoDB tables: 1G (Tables: 68)  
[!!] Total fragmented tables: 61  

-------- Security Recommendations  -------------------------------------------  
[OK] All database users have passwords assigned  

-------- Performance Metrics -------------------------------------------------  
[--] Up for: 5d 21h 7m 0s (35M q [70.046 qps], 379K conn, TX: 152B, RX: 7B)  
[--] Reads / Writes: 59% / 41%  
[--] Total buffers: 5.9G global + 4.2M per thread (500 max threads)  
[OK] Maximum possible memory usage: 8.0G (51% of installed RAM)  
[OK] Slow queries: 0% (23K/35M)  
[OK] Highest usage of available connections: 17% (88/500)  
[OK] Key buffer size / total MyISAM indexes: 128.0M/75.2M  
[OK] Key buffer hit rate: 99.8% (101M cached / 155K reads)  
[OK] Query cache efficiency: 46.9% (11M cached / 23M selects)  
[OK] Query cache prunes per day: 0  
[OK] Sorts requiring temporary tables: 1% (30K temp sorts / 1M sorts)  
[!!] Temporary tables created on disk: 32% (1M on disk / 4M total)  
[OK] Thread cache hit rate: 99% (259 created / 379K connections)  
[!!] Table cache hit rate: 0% (96 open / 64K opened)  
[OK] Open file limit used: 0% (2/65K)  
[OK] Table locks acquired immediately: 99% (21M immediate / 21M locks)  
[OK] InnoDB buffer pool / data size: 4.0G/1.0G  
[OK] InnoDB log waits: 0  
-------- Recommendations -----------------------------------------------------  
General recommendations:  
    Run OPTIMIZE TABLE to defragment tables for better performance  
    Temporary table size is already large - reduce result set size  
    Reduce your SELECT DISTINCT queries without LIMIT clauses  
    Increase table_cache gradually to avoid file descriptor limits  
    Read this before increasing table_cache over 64:  
Variables to adjust:  
    table_cache (> 64)  
有人能建议一下要找什么吗<谢谢你!

1 个回复
SO网友:kovshenin

我想你有两个问题,一个是简单地揭示另一个。

第一个问题是,新闻稿软件/服务可能使用独特的链接来跟踪点击和活动。例如,如果在MailChimp活动中启用了Google Analytics跟踪,它将附加一个utm_campaign 每个目标URL都有一个变量,每个用户都有一个唯一的utm_term 变量

这意味着,电子邮件活动中的每一次单击都是一个唯一的URL,您的页面缓存插件可能不会从缓存中提供服务(假设您使用的是页面缓存插件),而是从头开始生成,这可能会导致负载。我不确定W3 Total Cache是否正确,可能有设置或其他原因,但下面是我如何忽略的utm_ 我的Batchache配置中的变量:

// Ignore get keys not used by PHP to serve cached pages.
$ignore_get_keys = array( \'utm_source\', \'utm_medium\', \'utm_term\', \'utm_content\', \'utm_campaign\' );

parse_str( $_SERVER[\'QUERY_STRING\'], $query );
foreach ( $ignore_get_keys as $key ) {
    if ( isset( $query[ $key ] ) )
        unset( $query[ $key ] );

    if ( isset( $_GET[ $key ] ) )
        unset( $_GET[ $key ] );
}

$_SERVER[\'QUERY_STRING\'] = http_build_query( $query );
第二个问题是,您的4核16G服务器因155次打开而死亡。合理配置的5美元单核512M服务器每秒可以处理5000多个请求,页面缓存是公平的。大约每秒5-10次,无需缓存。

因此,根据我非常粗略的计算,您应该能够每秒至少提供50个请求,而无需缓存,因此,如果155个打开导致服务器上出现大量负载问题,那么显然是出了问题。

分析是一个很好的开始。获得一个XHProf模块,甚至可以在生产服务器上完成。让it部门发送电子邮件和/或记录耗时超过1s的请求,您可能会很快发现瓶颈。

在找出瓶颈并对其进行排序后,我还建议您放弃Apache,转而使用fpm模式下的nginx和php 5.6。

结束

相关推荐

如果我将POSTS表中代表文章修订的所有行都删除到WordPress数据库中,会发生什么?

我对posts WordPress数据库的表。我看到,当我在这个表中创建一个新帖子时,会自动创建2个新行。32 1 2014-08-16 15:07:22 2014-08-16 15:07:22 TEST REVISION TEST REVISION inherit open open 31-revision-v1 2014-08-16 15:07:22 2014-08-16 15:07:22 31 http://localhost/w