- 浏览: 170522 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
HATS:
请问楼主的需求是什么样的呢?为什么说python这几个库不能给 ...
使用Python操作Excel,xlrd,xlwt,xlutils -
hrbjie:
n你好,能不能写篇关于jrockit 工具如何使用的文章
TOMCAT 配置 JROCKIT MISSION CONTROL -
fjchenq:
非常感谢。
pydev 1.6.3如何设置才能eclipse ...
安装Python 3.1 ,Pydev 1.4.7 Eclipse过程 -
jerryfeng:
请尊重他人劳动成果,转载请标明出处;
我是http://cod ...
asm解读 -
rzl888:
不错 学习了
PHP 获取文件 或 字符串的编码方式 mb_detect_encoding()
测试环境:理想论坛(55188).
理想论坛为国内人气最旺的股票论坛,注册会员已超过100万,并以每月60000人的速度稳定递增,每日页面访问量超过200万,并保持稳定增长的趋
势,60分钟在线平均约2万多人,最高记录3万3千多。 目前主题超过30万,帖子接近1千万,数据库大小5.8GB,附件总大小大约150GB
之前理想论坛有三台服务器,两台WEB服务器以及一台数据库服务器,访问已经渐渐出现瓶颈,在作者的建议下,站长决定增加一台服务器放数据库,另外三台做
WEB,并且对原有的服务器的操作系统进行升级。
硬件具体情况
MySQL服务器: DualXeon 5335/8GB内存/73G SAS硬盘(RAID0+1)/CentOS5.1-x86_64/MySQL5
三台WEB服务器如下:
N1. Dual Xeon 3.0 2GB 内存
N1. Dual Xeon 3.0 4GB 内存
N1. Dual Xeon 3.0(双核) 4G内存
另外有三块300G的SCSI硬盘准备做RAID5,用来存放附件,四台机器通过内网连接
考虑过的解决方案如下:
1. ZEUS + PHP5 + eAccelerator
2. squid + Apache2 + PHP + eAccelerator
3. nginx + PHP(fastcgi) + eAccelerator
4. nginx + Apache2 + PHP + eAccelerator
第一个方案,属于比较完美的,而且很稳定,但是最大的问题是ZEUS是收费软件,用盗版总会受良心责备的,所以暂时押后做候补方案
第二个方案,squid转发请求给Apache2,很多网站都采用这种方式,而且效率也非常高,作者也测试了一下,但是问题非常严重,因为squid是把文件缓存起来的,所以每一个访问过的文件,squid都要把它打开,理想论坛拥有150G的附件,而且访问量巨大,这种情况下只有打开squid,机器很快就会因为打开文件过多而拒绝响应任何请求了,看来也不适合,只适合缓存文件只有几百M以内的网站.
第三个方案,作者对第三个方案的测试结果是访问量大的时候,PHP经常会出现bad gateway,看来通过TCP连接Fastcgi执行PHP的方法不够稳定,作者也测试了通过Unix Socket连接执行PHP,同样还是不稳定.
对比之下,作者目前使用了第四种解决方案.
Apache2的安装。
(由于服务器采用FreeBSD7,所以大部分软件将会通过ports安装)
由于Apache2只需要处理PHP请求,所以其他模块基本上都不需要,所以不要选择安装其他模块,即使rewrite也不需要,因为rewrite将会在nginx上面实现,如果熟悉,还可以修改Makefile删掉不需要的部分,这样经过优化之后,apache将会以最稳定最高效的方式处理PHP请求
cd /usr/ports/www/apache20
make install clean
修改httpd.conf(这里仅列出要修改/增加的部分)
vi /usr/local/etc/apache2/httpd.conf
把KeepAlive On修改为KeepAlive Off,在下面添加
ServerLimit 2048
MaxClients增加到512
Listen 127.0.0.1:81 #由于httpd服务器不需要对外开放,仅仅处理nginx转发过来的PHP请求,所以仅仅需要监听本地的端口.
另外增加对PHP的支持
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
至于添加虚拟主机的部分将不再罗嗦,注意虚拟主机也监听本地81端口就可以了
PHP5的安装(GD库等模块请提前装好)
cd /usr/ports/lang/php5
修改一下Makefile,把需要的东西加上去吧
本来应该有这样一段的
CONFIGURE_ARGS= \
–with-layout=GNU \
–with-config-file-scan-dir=${PREFIX}/etc/php \
–disable-all \
–enable-libxml \
–with-libxml-dir=${LOCALBASE} \
–enable-reflection \
–program-prefix=""
我们要把它修改成
CONFIGURE_ARGS= \
–with-layout=GNU \
–with-config-file-scan-dir=${PREFIX}/etc/php \
–disable-all \
–enable-libxml \
–with-libxml-dir=${LOCALBASE} \
–enable-reflection \
–program-prefix="" \
–with-config-file-path=/etc –enable-mbstring –enable-ftp –with-gd –with-jpeg-dir=/usr/local –with-png-dir=/usr/local –enable-magic-quotes –with-mysql=/usr/local –with-pear –enable-sockets –with-ttf –with-freetype-dir=/usr/local –enable-gd-native-ttf –with-zlib –enable-sysvsem –enable-sysvshm –with-libxml-dir=/usr/local –with-pcre-regex –enable-xml
make install clean
cp work/php-5.2.5/php.ini-dist /etc/php.ini
安装eAccelerator
cd /usr/ports/www/eaccelerator
make install clean
把以下部分添加到php.ini尾端:
extension_dir="/usr/local/lib/php/20060613/"
extension="eaccelerator.so"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.shm_size="64"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="60"
eaccelerator.shm_prune_period="60"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys="shm_and_disk"
eaccelerator.sessions="shm_and_disk"
eaccelerator.content="shm_and_disk"
建立缓存目录以及修改权限
mkdir /tmp/eaccelerator
chmod 777 /tmp/eaccelerator
chown nobody:nobody /tmp/eaccelerator
nginx的安装以及配置
cd /usr/ports/www/nginx
make install
有几个module是我们需要的,要选上
HTTP module
http_addition module
http_rewrite module
http_realip module
http_stub_status module
其他的看自己需要了
修改配置文件
vi /usr/local/etc/nginx/nginx.conf
user nobody nobody;
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid /var/log/nginx.pid;
events {
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
limit_zone one $binary_remote_addr 10m;
#log_format main '$remote_addr – $remote_user [$time_local] $request'
# '"$status" $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
sendfile off;
tcp_nopush off;
#keepalive_timeout 0;
keepalive_timeout 10;
gzip off;
server {
listen 80;
server_name www.55188.net www.55188.com www1.55188.com www2.55188.com 55188.com 55188.net www.55188.cn 55188.cn bbs.55188.net bbs.55188.com bbs.55188.cn;
index index.html index.htm index.php;
root /home/www;
access_log /dev/null combined;
limit_conn one 5;#限制一个IP并发连接数为五个
error_page 404 /404.html;
error_page 403 /403.html;
location /status {
stub_status on;
access_log off;
auth_basic “NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#在根目录使用Discuz6.0 rewrite规则,如果你的论坛在二级目录下面,则要相应修改location
location / {
rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&extra=page\%3D$3&page=$2 last;
rewrite ^/space-(username|uid)-(.+)\.html$ /space.php?$1=$2 last;
rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;
break;
error_page 404 /404.html;
error_page 403 /403.html;
}
#对附件做防盗链,没有正确的referer将会返回403页面
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {
valid_referers none blocked server_names *.55188.net *.55188.com;
if ($invalid_referer) {
rewrite ^/ http://www.55188.com/403.html;
}
}
#转发PHP请求到本地的81端口,让Apache处理.
location ~ \.php$ {
proxy_pass http://127.0.0.1:81;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header Content-Type;
}
}
}
测试一下你的配置文件是否都正确
/usr/local/sbin/apachectl configtest
/usr/local/sbin/nginx -t
都没问题的话就启动服务器吧
/usr/local/sbin/apachectl start
/usr/local/sbin/nginx -c /usr/local/etc/nginx/nginx.conf
浏览一下主页,应该正常了
后继讨论,
1.数据库.
数据库的编译安装不再重复讨论,仅仅讨论环境,由于理想论坛的数据库比较大,而且发展比较快,所以要作比较前一点的预算,硬盘需要使用15K RPM的SAS硬盘做RAID0+1,操作系统需要使用64位版本,因为服务器需要8GB内存,要注意的时,使用了64位系统之后部分比较老的软件可能你无法找到64位的版本,这台机器就专门做MySQL服务器吧,如果数据库超过10G,应该考虑MySQL_Cluster
2.附件.
因为有三台服务器做WEB,所以附件要使用nfs的方式通过内网进行共享,至于如何设置nfs这里不再讨论,如果有不明白的请将学费交给Google
3.WEB.
由于三台机器硬件配置不一致,所以有必要考虑一下负载平衡的问题,nginx本身附带有负载平衡的功能,但是如果启用负载平衡的功能的话,每台机器都将会把客户端请求的数据缓存到本机,这样增加了硬盘的IO,对于理想论坛的访问量来说,这是个不小的开销,最后我们是使用DNS查询的方式来分配流量, 通过不同的A记录,配置好点的机器,多分一条A记录,配置差的就少一条A记录,这样从整体上看,流量分配应该比较平衡.
4.关于nginx并发连接
作者给nginx限制了每个IP的并发连接,因为对于大论坛来说,总是比较出名的,不说人家攻击你什么的.采集都特别多,如果不限制,很容易出问题,经常会导致PHP无法使用.
以上只是作者愚见,如果有其他进展,作者会更新本贴,如有疑问或者不同见解,欢迎提出讨论
当然还有很多很疯狂的方法,例如说把WEB文件(附件除外)全部放内存里面,MYSQL如果小于5G,也可以全部放内存里面,不过这些方法都是太极端的了,优化效果须然好,但是风险很大。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
优化之后的效果
由于还有两台机器升级没完成,只帖一下其中一台WEB的状况了。目前
Active connections: 1143
server accepts handled requests
1211445 1211445 6221785
Reading: 67 Writing: 136 Waiting: 940
Apache最优化要关闭不用的模块,因为httpd请求全部让nginx处理了,Apache仅仅需要处理PHP就可以了,目前我开启的模块
LoadModule access_module libexec/apache2/mod_access.so
LoadModule setenvif_module libexec/apache2/mod_setenvif.so
LoadModule mime_module libexec/apache2/mod_mime.so
LoadModule autoindex_module libexec/apache2/mod_autoindex.so
LoadModule negotiation_module libexec/apache2/mod_negotiation.so
LoadModule alias_module libexec/apache2/mod_alias.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php5_module libexec/apache2/libphp5.so
autoindex negotiation以及rewrite这些应该都关闭的,但是要做相应的修改.目前跑起来绝对比Fastcgi要好
转载自 http://www.discuz.net/thread-882980-1-2.html
发表评论
-
php preg_replace 乱码问题
2011-07-15 09:18 3167还是用代码来说话吧: $pattern = " ... -
rpm升级CentOS系统中PHP、MySQL、HTTPD
2010-05-24 14:12 1319rpm升级CentOS系统中PHP、MySQL、HTTPD ... -
sudo: sorry, you must have a tty to run sudo
2010-05-18 10:49 1104当报sudo: sorry, you must have a ... -
PHP长连接session被独占,通过解释SESSION文件来验证SESSION内容
2010-05-17 13:10 2226最近我在尝试用PHP来实现Comet技术,为了 ... -
PHP 文件下载注意事项
2010-05-04 18:03 1582<?php /* 为了方便大家,我把我遇到的问题总结 ... -
用PHP检测并去掉UTF-8中的BOM
2010-05-04 18:02 1763<?php /*清除rom*/ if(isse ... -
PHP的UTF-8 BOM引起的问题
2010-05-04 18:01 1359习惯了用edit plus进行php编程,所以有时会出现 ... -
PHP 获取文件 或 字符串的编码方式 mb_detect_encoding()
2010-01-08 15:59 6658原理: 使用 mb_detect_encoding() 函数 ... -
用正则表达式求<img src=...>图片字符串
2009-12-28 10:40 3616<?php $content = '<div i ... -
php代码不能保存为UTF-8+BOM格式的
2009-12-18 10:57 2154最近用EditPlus编写php时,当incl ... -
在Centos5中以rpm方式安装php
2009-12-03 15:50 3230参考文章: http://www.zia.web.id/li ... -
PHP V5.2 中的新增功能,第 5 部分: 跟踪文件上传进度
2009-12-03 13:47 1275原文地址:http://www.ibm.c ... -
Apache 网站访问速度提升优化的几点实践
2009-11-09 15:02 1101原文地址:http://www.xia ... -
PHP 通过LDAP协议,操作Windows Active Directory
2009-11-06 14:25 2763我从来就没有接触过Active Directory,这次是第 ...
相关推荐
java 程序设计 万日历 生成在线文档
适用范围 本文主要针对小型互联网公司,特别适用于手机APP的后台架构,基本可以支撑5万日活 本文会对可能用到的相关技术进行技术选型的说明,以及相对应的设备的采购。 技术指标 说一下一些技术指标的计算过程可以...
Vista风格日历控件C#源码+Word教程,使用GDI+制作控件是如此的易如反掌,你会发现开发变得越来越有趣!这个是和前面的Vista系列控件同一批制作的日历控件,有多种颜色风格可选,比较简单,大家可以下来看看,应该对C#...
横河电机上市SoC测试系统“TS6000H++”。特点是配备自己开发的LSI、驱动·时序精度(EPA)由原来的±175ps提高至±100ps、约提高了60%。主要销售对象为生产手机及超薄电视等数码家电用SoC的厂商。与使用此前的机型...
用c++写的万年历程序 谢谢评价 谢谢,其中还有些不足的地方 谢谢。用c++写的万年历程序 谢谢评价 谢谢,其中还有些不足的地方 用c++写的万年历程序 谢谢评价 谢谢,其中还有些不足的地方用c++写的万年历程序 谢谢...
*自2020年10月起,面向最近销售额低于1000万日元的小型企业,个人,学生,圈子和其他团体免费发行作品。 准备 1. 1。 下载Cubism SDK for Web 2. 2。解压缩文件夹3。 将“ live2dcubismcore.min.js”放在Maker MV...
C++的异步日志, 其特点是效率高(实测每秒支持125+万日志写入)、易拓展,尤其适用于频繁写日志的场景
2)根据我们估算,以 Chatgpt日前约 2500 万日活、使用英伟达 A100 芯片等作为基础假设,访问阶段算力初始投入约近 8 亿美元,训练阶段算力投入约为单次 140 万美元;另外,考虑 Google每日搜索量已达到 35 亿,我们...
美国安捷伦科技推出了8款测定带宽为2GHz~13GHz的“Infiniium DSO80000B”系列示波器。用于高速串行接口等技术研发,最大可将测定带宽扩展至13GHz。产品卖点是能够削减换机费用。比如,将开发对象由现有的PCI ...
价格为17.4万日元起。 这款笔记本采用铝制机身,最薄处只有9.7mm厚,最厚处也只有10.3mm。键盘部嵌入显示屏收放。机身根据热敏式锁扣系统开闭。打开时,键盘内侧被托起。 除了惊为天人的厚度外,Adamo XPS...
RING LOG是一个高效简洁的C 异步日志, 其特点是效率高(每秒支持125 万日志写入)、易拓展,尤其适用于频繁写日志的场景
价格为17.4万日元起。 这款笔记本采用铝制机身,薄处只有9.7mm厚,厚处也只有10.3mm。键盘部嵌入显示屏收放。机身根据热敏式锁扣系统开闭。打开时,键盘内侧被托起。 除了惊为天人的厚度外,Adamo XPS的...
我们认为,适龄劳动人口平均年龄与寿险密度之间的正相关性主要源于家庭资产负债结构 的变化:根据家庭生命周期理论,在家庭组建的前期(25-39 岁),家庭处于“高负债、 低资产”的状态,富余资金较少;...
夏普于2007年12月4日宣布开发出了符合中国微波数字电视标准的小型调谐器模块...图2:模块的背面。夏普没有透露背面的IC是调谐器IC还是OFDM的解调IC。 图3:模块结构图和中国标准概要 图4:公开演示利用
大日本印刷宣布,为汽车黑匣子开发出了嵌入式MPEG-4图像处理卡“CB4200B”,汽车黑匣子可对冲击做出反应并自动记录撞车发生前后的图像。2007年1月开始销售。样品定价为8万日元。...包括相关商品在内,20
该显示器的价格采用开放式,设想市场价格在100万日元左右。 此次的商用显示器通过液晶显示器和触摸面板的一体化,减小了视差。并且,据称此次的触摸面板采用了检测精度高于以往机型的红外线遮断检测方式,因此...
西藏区域地质调查大队在1∶100万日喀则幅区调中将措勤地区划分为两个地层小区,各自建立了下白垩统的岩石地层系统。作者根据在该区测制的下白垩统连续地层剖面及相关地质调查,认为这两个地层小区并不存在;建议在措勤...
而测算结果仅根据4000 万日活用户,每日4000 字问题计算得出。另外我们考虑到服务器自身算力的提升,对到 2024 年底算力需求与服务器需求量进行测算。预计到 2024年底AI 服务器需求量约为 23 万台 (5 亿用户数/46 万...
背景:慢性肾脏病(CKD)是进行血液透析的终末期肾脏病(ESKD)的前提,也是心血管疾病的危险因素。 因此,建立CKD预防措施至关重要。 特别是,以收入为代表的社会经济地位(SES)会导致诸如CKD之类的非传染性疾病。...
上海二手房价格预测界面 这是复旦大学数据科学学院的数据挖掘课程(DATA620007)。 要求: Tensorflow 1.0.1 Python 3.6 训练数据: 从于2018年4月。 爬行部分是由建造的。 ... 结构:具有200个节点和ReLU的两层全...