性能优化

性能优化

求方案:wecenter的session经常卡死数据库,有没有朋友有好的解决方案?

冰洋 回复了问题 • 5 人关注 • 2 个回复 • 1218 次浏览 • 2017-05-31 21:50 • 来自相关话题

models/posts.php 翻页性能优化

kenw2004 发表了文章 • 1 个评论 • 626 次浏览 • 2017-05-28 17:31 • 来自相关话题

数据量过大时(100w条以上),首页翻页会引起mysql负载过高,原因在于 posts_index 翻页引起的   这里做一个小改造,能有效降低翻页时的负载   修改:models/posts.php 文件 ...查看全部
数据量过大时(100w条以上),首页翻页会引起mysql负载过高,原因在于 posts_index 翻页引起的
 
这里做一个小改造,能有效降低翻页时的负载
 
修改:models/posts.php 文件
 
把  
			$posts_index = $this->fetch_page('posts_index', implode(' AND ', $where), $order_key, $page, $per_page);

$this->posts_list_total = $this->found_rows();

改为
    //翻页优化改造
    $page = empty($page) ? 1 : $page;
    $per_page = empty($per_page) ? 10 : $per_page;   
            if (empty($category_id)) {
                if (!$max_id = AWS_APP::cache()->get('max_post_id') AND empty($where)) {
                    $max = $this->query_all('SELECT max(`id`) as n FROM ' . get_table('posts_index'));
                    $max_id = $max[0]['n'];
                    AWS_APP::cache()->set('max_post_id', $max_id, get_setting('cache_level_high'));
                }
                $start_id = $max_id - $per_page * $page;
                $end_id = $start_id + $per_page;
                $where = '`id` BETWEEN ' . $start_id . ' AND ' . $end_id;
                //end 翻页改造
                $posts_index = $this->fetch_page('posts_index', implode(' AND ', $where), $order_key, 1, $per_page);
                $this->posts_list_total = $max_id;
            } else {
                //分类页不优化
                $posts_index = $this->fetch_page('posts_index', implode(' AND ', $where), $order_key, $page, $per_page);
                $this->posts_list_total = $this->found_rows();
            }
虽然这样翻页是不精确的,是根据id估算该页的起止位置,但是能降低翻页的打开时间,可以一试。
分类页没有优化,目前尚未发现其它报错信息!
 
另外,如果需要按热度或日期排序,此方法就没效果了,排序会引起mysql全表扫描。

如果你的更好的方案,或有什么问题,请留言!

【性能优化】models/posts.php 中某处可能引起性能问题的修改

kenw2004 发表了文章 • 5 个评论 • 1024 次浏览 • 2017-05-26 18:19 • 来自相关话题

posts.php中有个根据话题进行相关文章的查询,在该话题下文章较多时,可能出现性能问题,如果网站数据量比较小,此问题不会明显影响网站运行。   以下是修改方法:   一、在 public function g ...查看全部
posts.php中有个根据话题进行相关文章的查询,在该话题下文章较多时,可能出现性能问题,如果网站数据量比较小,此问题不会明显影响网站运行。
 
以下是修改方法:
 
一、在 public function get_posts_list_by_topic_ids 函数内加一个限制:
		array_walk_recursive($topic_ids, 'intval_string');

上增加限制,修改后如下:
		if (count($topic_ids) > 10) {
shuffle($topic_ids);
$topic_ids = array_slice($topic_ids, 0, 10);
}
array_walk_recursive($topic_ids, 'intval_string');

二、此函数接着往下
在 foreach ($post_ids AS $key => $val) { 
后增加限制如下:
		foreach ($post_ids AS $key => $val) {			
if (count($val) > 10) {
shuffle($val);
$val = array_slice($val, 0, 10);
}
$post_id_where = "(post_id IN (" . implode(',', $val) . ") AND post_type = '" . $this->quote($key) . "')";
}

如果不加上述限制,该关联话题有1000条内容,此查询会把1000条全部读取出来。
 
如果发现其它问题,请跟帖交流!
 
 
 
 
 

修改topic页的一处可能引起性能问题的方法,解决因此引起的不定期卡死

回复

kenw2004 发起了问题 • 3 人关注 • 0 个回复 • 739 次浏览 • 2017-05-24 20:15 • 来自相关话题

翻页Sql 使用 OFFSET 严重影响性能,建议改用where id > n limit $page

no_reg 回复了问题 • 3 人关注 • 1 个回复 • 729 次浏览 • 2016-11-18 14:36 • 来自相关话题

一个页面开发了所有的功能,欢迎大家暴力测试

三叔 回复了问题 • 9 人关注 • 7 个回复 • 1209 次浏览 • 2016-10-20 09:16 • 来自相关话题

性能优化,移除了Zend框架,速度上快多了,大家可以测试测试

kimwang 回复了问题 • 6 人关注 • 3 个回复 • 783 次浏览 • 2016-07-27 23:08 • 来自相关话题

Wecenter并发负载能力小测

kenw2004 发表了文章 • 10 个评论 • 2579 次浏览 • 2016-01-24 01:18 • 来自相关话题

有人问Wecenter并发负载能力如何,http://wenda.wecenter.com/question/28658 随手测试了一下,测试环境没有那么严格,自己本地两台机器间测试,搭建的程序是在3.1.7基础上小改了一下的,不是官方的原版。 ...查看全部
有人问Wecenter并发负载能力如何,http://wenda.wecenter.com/question/28658
随手测试了一下,测试环境没有那么严格,自己本地两台机器间测试,搭建的程序是在3.1.7基础上小改了一下的,不是官方的原版。
 
并发数    响应时间
5    0.173
10    0.332
20    0.627
50    1.739
100    2.681
500    8.895
首页和问答页的情况差不多。
 
用官方的3.1.7原版,只加了1条内容的情况下
并发数    响应时间
20    0.409
100    1.785

运行环境
硬件:i5 4460(四核四线程)  16G SSD硬盘 1G局域网
软件:ubuntu环境 php5.3 +  apc + Redis缓存 + mysql已优化
 
测试不是很严格,随手加了点内容就测了,数据凑合着看吧。 
 
大家问并发和负载,无非是在想,自己网站做大了,这程序能不能受得了,不想流量上去了,程序撑不住。下面说说你的担心会不会发生。

20并发时的程序响应时间尚在较好水平,负载能力足够应用。下面算算20并发能为你带来多少访问量。

PV每天是2亿多的站,并发不到10万(其中包括css,js,图片的并发)
网上抄了一个计算公式:
保证10万PV的并发连接数:
(100000PV / 86400秒 * 10个派生连接数 * 5秒内响应 * 5倍峰值) / 1台Web服务器 = 289连接数
 
把公式换过来来,单纯只算程序需要响应的并发,忽略派生连接数,并1秒内响应:
20并发 * 86400 / 0.6秒响应 / 5倍峰值 = 57.6 万PV 

10w pv ≈ 300连接数,除去派生连接(非程序的连接,如css,js和图片), 300个连接中,只有30个是php需要响应的。
 
这样测算下来,1台web服务器,20程序并发(200web并发)足够支撑日访问量 57.6 万PV ,如果扩大到3秒内响应都算合格,php响应100并发(1000web并发)可以支撑1600万pv了,当你57.6 万PV 时,一定有能力请专业人员做进一步的优化。实际上,这时的瓶颈在带宽,而不在程序了。
 
测试和测算不是太严谨,欢迎点赞和各种喷!

【已解决】慢查询怎么优化,如何提升页面打开的时间

回复

xiaoshimu 发起了问题 • 2 人关注 • 0 个回复 • 828 次浏览 • 2015-06-29 13:32 • 来自相关话题

wecenter增加redis支持模块配置

zhengqiang 发表了文章 • 10 个评论 • 1914 次浏览 • 2014-05-22 16:29 • 来自相关话题

redis是高性能的缓存工具,相比较memecache有很多优势。zend官方暂时没有支持组件,但是也有不少第三方在做贡献。 1. 下载https://github.com/kalaspuff/redis-cache-zend-framework对 ...查看全部
redis是高性能的缓存工具,相比较memecache有很多优势。zend官方暂时没有支持组件,但是也有不少第三方在做贡献。
1. 下载https://github.com/kalaspuff/redis-cache-zend-framework对应的redis类文件,放在系统
system/zend/cache/backend/里面。
2. 安装phpredis支持,https://github.com/nicolasff/phpredis,在php.ini里面开启redis.so配置
3. 在服务器上安装redis服务器。
4. 修改wecenter的cache配置文件,/system/core/cache.php文件的第25行
{{{
// 支持 File, Memcached, APC, Xcache, 手册参考: http://framework.zend.com/manual/zh/zend.cache.html
private $backendName = 'Redis';

private $backendOptions = array(
// redis 配置
'servers' => array(
array(
'host' => '127.0.0.1',
'port' => 6379,
'dbindex' => 1,
)
)
);
}}}

试试,有问题提出来一起交流。

wecenter增加redis支持模块配置

zhengqiang 发表了文章 • 10 个评论 • 1914 次浏览 • 2014-05-22 16:29 • 来自相关话题

redis是高性能的缓存工具,相比较memecache有很多优势。zend官方暂时没有支持组件,但是也有不少第三方在做贡献。 1. 下载https://github.com/kalaspuff/redis-cache-zend-framework对 ...查看全部
redis是高性能的缓存工具,相比较memecache有很多优势。zend官方暂时没有支持组件,但是也有不少第三方在做贡献。
1. 下载https://github.com/kalaspuff/redis-cache-zend-framework对应的redis类文件,放在系统
system/zend/cache/backend/里面。
2. 安装phpredis支持,https://github.com/nicolasff/phpredis,在php.ini里面开启redis.so配置
3. 在服务器上安装redis服务器。
4. 修改wecenter的cache配置文件,/system/core/cache.php文件的第25行
{{{
// 支持 File, Memcached, APC, Xcache, 手册参考: http://framework.zend.com/manual/zh/zend.cache.html
private $backendName = 'Redis';

private $backendOptions = array(
// redis 配置
'servers' => array(
array(
'host' => '127.0.0.1',
'port' => 6379,
'dbindex' => 1,
)
)
);
}}}

试试,有问题提出来一起交流。

如果站点数据库压力过大,请利用memcached优化数据库缓存!

WeCenter 程序裸奔 回复了问题 • 32 人关注 • 3 个回复 • 4102 次浏览 • 2013-02-23 11:06 • 来自相关话题

求方案:wecenter的session经常卡死数据库,有没有朋友有好的解决方案?

回复

冰洋 回复了问题 • 5 人关注 • 2 个回复 • 1218 次浏览 • 2017-05-31 21:50 • 来自相关话题

修改topic页的一处可能引起性能问题的方法,解决因此引起的不定期卡死

回复

kenw2004 发起了问题 • 3 人关注 • 0 个回复 • 739 次浏览 • 2017-05-24 20:15 • 来自相关话题

翻页Sql 使用 OFFSET 严重影响性能,建议改用where id > n limit $page

回复

no_reg 回复了问题 • 3 人关注 • 1 个回复 • 729 次浏览 • 2016-11-18 14:36 • 来自相关话题

一个页面开发了所有的功能,欢迎大家暴力测试

回复

三叔 回复了问题 • 9 人关注 • 7 个回复 • 1209 次浏览 • 2016-10-20 09:16 • 来自相关话题

性能优化,移除了Zend框架,速度上快多了,大家可以测试测试

回复

kimwang 回复了问题 • 6 人关注 • 3 个回复 • 783 次浏览 • 2016-07-27 23:08 • 来自相关话题

【已解决】慢查询怎么优化,如何提升页面打开的时间

回复

xiaoshimu 发起了问题 • 2 人关注 • 0 个回复 • 828 次浏览 • 2015-06-29 13:32 • 来自相关话题

www.eiyou.cn 数据 70万+++ 测试 后台进入504错误 话题 504错误

回复

sinosoho 回复了问题 • 11 人关注 • 6 个回复 • 1185 次浏览 • 2014-03-17 17:54 • 来自相关话题

帮忙看下wenbing.cn 网站打开速度很慢 mysql 占cpu经常100%

回复

sfg007 回复了问题 • 4 人关注 • 3 个回复 • 1231 次浏览 • 2013-07-18 11:09 • 来自相关话题

调用关注问题的人后台加个数据查询显示限制吧,有些帖子上千人回了查询起来太利害,数据查询有待优化

回复

AWSupport 回复了问题 • 2 人关注 • 1 个回复 • 956 次浏览 • 2013-07-09 09:42 • 来自相关话题

貌似没有网页压缩输出这一项设置。

回复

WeCenter 程序zhengqiang 回复了问题 • 2 人关注 • 1 个回复 • 827 次浏览 • 2013-04-16 21:50 • 来自相关话题

models/posts.php 翻页性能优化

kenw2004 发表了文章 • 1 个评论 • 626 次浏览 • 2017-05-28 17:31 • 来自相关话题

数据量过大时(100w条以上),首页翻页会引起mysql负载过高,原因在于 posts_index 翻页引起的   这里做一个小改造,能有效降低翻页时的负载   修改:models/posts.php 文件 ...查看全部
数据量过大时(100w条以上),首页翻页会引起mysql负载过高,原因在于 posts_index 翻页引起的
 
这里做一个小改造,能有效降低翻页时的负载
 
修改:models/posts.php 文件
 
把  
			$posts_index = $this->fetch_page('posts_index', implode(' AND ', $where), $order_key, $page, $per_page);

$this->posts_list_total = $this->found_rows();

改为
    //翻页优化改造
    $page = empty($page) ? 1 : $page;
    $per_page = empty($per_page) ? 10 : $per_page;   
            if (empty($category_id)) {
                if (!$max_id = AWS_APP::cache()->get('max_post_id') AND empty($where)) {
                    $max = $this->query_all('SELECT max(`id`) as n FROM ' . get_table('posts_index'));
                    $max_id = $max[0]['n'];
                    AWS_APP::cache()->set('max_post_id', $max_id, get_setting('cache_level_high'));
                }
                $start_id = $max_id - $per_page * $page;
                $end_id = $start_id + $per_page;
                $where = '`id` BETWEEN ' . $start_id . ' AND ' . $end_id;
                //end 翻页改造
                $posts_index = $this->fetch_page('posts_index', implode(' AND ', $where), $order_key, 1, $per_page);
                $this->posts_list_total = $max_id;
            } else {
                //分类页不优化
                $posts_index = $this->fetch_page('posts_index', implode(' AND ', $where), $order_key, $page, $per_page);
                $this->posts_list_total = $this->found_rows();
            }
虽然这样翻页是不精确的,是根据id估算该页的起止位置,但是能降低翻页的打开时间,可以一试。
分类页没有优化,目前尚未发现其它报错信息!
 
另外,如果需要按热度或日期排序,此方法就没效果了,排序会引起mysql全表扫描。

如果你的更好的方案,或有什么问题,请留言!

【性能优化】models/posts.php 中某处可能引起性能问题的修改

kenw2004 发表了文章 • 5 个评论 • 1024 次浏览 • 2017-05-26 18:19 • 来自相关话题

posts.php中有个根据话题进行相关文章的查询,在该话题下文章较多时,可能出现性能问题,如果网站数据量比较小,此问题不会明显影响网站运行。   以下是修改方法:   一、在 public function g ...查看全部
posts.php中有个根据话题进行相关文章的查询,在该话题下文章较多时,可能出现性能问题,如果网站数据量比较小,此问题不会明显影响网站运行。
 
以下是修改方法:
 
一、在 public function get_posts_list_by_topic_ids 函数内加一个限制:
		array_walk_recursive($topic_ids, 'intval_string');

上增加限制,修改后如下:
		if (count($topic_ids) > 10) {
shuffle($topic_ids);
$topic_ids = array_slice($topic_ids, 0, 10);
}
array_walk_recursive($topic_ids, 'intval_string');

二、此函数接着往下
在 foreach ($post_ids AS $key => $val) { 
后增加限制如下:
		foreach ($post_ids AS $key => $val) {			
if (count($val) > 10) {
shuffle($val);
$val = array_slice($val, 0, 10);
}
$post_id_where = "(post_id IN (" . implode(',', $val) . ") AND post_type = '" . $this->quote($key) . "')";
}

如果不加上述限制,该关联话题有1000条内容,此查询会把1000条全部读取出来。
 
如果发现其它问题,请跟帖交流!
 
 
 
 
 

Wecenter并发负载能力小测

kenw2004 发表了文章 • 10 个评论 • 2579 次浏览 • 2016-01-24 01:18 • 来自相关话题

有人问Wecenter并发负载能力如何,http://wenda.wecenter.com/question/28658 随手测试了一下,测试环境没有那么严格,自己本地两台机器间测试,搭建的程序是在3.1.7基础上小改了一下的,不是官方的原版。 ...查看全部
有人问Wecenter并发负载能力如何,http://wenda.wecenter.com/question/28658
随手测试了一下,测试环境没有那么严格,自己本地两台机器间测试,搭建的程序是在3.1.7基础上小改了一下的,不是官方的原版。
 
并发数    响应时间
5    0.173
10    0.332
20    0.627
50    1.739
100    2.681
500    8.895
首页和问答页的情况差不多。
 
用官方的3.1.7原版,只加了1条内容的情况下
并发数    响应时间
20    0.409
100    1.785

运行环境
硬件:i5 4460(四核四线程)  16G SSD硬盘 1G局域网
软件:ubuntu环境 php5.3 +  apc + Redis缓存 + mysql已优化
 
测试不是很严格,随手加了点内容就测了,数据凑合着看吧。 
 
大家问并发和负载,无非是在想,自己网站做大了,这程序能不能受得了,不想流量上去了,程序撑不住。下面说说你的担心会不会发生。

20并发时的程序响应时间尚在较好水平,负载能力足够应用。下面算算20并发能为你带来多少访问量。

PV每天是2亿多的站,并发不到10万(其中包括css,js,图片的并发)
网上抄了一个计算公式:
保证10万PV的并发连接数:
(100000PV / 86400秒 * 10个派生连接数 * 5秒内响应 * 5倍峰值) / 1台Web服务器 = 289连接数
 
把公式换过来来,单纯只算程序需要响应的并发,忽略派生连接数,并1秒内响应:
20并发 * 86400 / 0.6秒响应 / 5倍峰值 = 57.6 万PV 

10w pv ≈ 300连接数,除去派生连接(非程序的连接,如css,js和图片), 300个连接中,只有30个是php需要响应的。
 
这样测算下来,1台web服务器,20程序并发(200web并发)足够支撑日访问量 57.6 万PV ,如果扩大到3秒内响应都算合格,php响应100并发(1000web并发)可以支撑1600万pv了,当你57.6 万PV 时,一定有能力请专业人员做进一步的优化。实际上,这时的瓶颈在带宽,而不在程序了。
 
测试和测算不是太严谨,欢迎点赞和各种喷!

wecenter增加redis支持模块配置

zhengqiang 发表了文章 • 10 个评论 • 1914 次浏览 • 2014-05-22 16:29 • 来自相关话题

redis是高性能的缓存工具,相比较memecache有很多优势。zend官方暂时没有支持组件,但是也有不少第三方在做贡献。 1. 下载https://github.com/kalaspuff/redis-cache-zend-framework对 ...查看全部
redis是高性能的缓存工具,相比较memecache有很多优势。zend官方暂时没有支持组件,但是也有不少第三方在做贡献。
1. 下载https://github.com/kalaspuff/redis-cache-zend-framework对应的redis类文件,放在系统
system/zend/cache/backend/里面。
2. 安装phpredis支持,https://github.com/nicolasff/phpredis,在php.ini里面开启redis.so配置
3. 在服务器上安装redis服务器。
4. 修改wecenter的cache配置文件,/system/core/cache.php文件的第25行
{{{
// 支持 File, Memcached, APC, Xcache, 手册参考: http://framework.zend.com/manual/zh/zend.cache.html
private $backendName = 'Redis';

private $backendOptions = array(
// redis 配置
'servers' => array(
array(
'host' => '127.0.0.1',
'port' => 6379,
'dbindex' => 1,
)
)
);
}}}

试试,有问题提出来一起交流。