如何将php5 MySQL扩展到200个请求/秒以上?

前端之家收集整理的这篇文章主要介绍了如何将php5 MySQL扩展到200个请求/秒以上?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在调整我的主页的性能,目前它处理大约200个请求/秒3.14.by吃6个SQL查询,20个req​​ /秒3.14.by/forum这是PHPBB论坛.

奇怪的是,在某些VPS和专用的Atom 330服务器上,数字大致相同.

服务器软件如下:Apache2 mod_PHP prefork 4个孩子(这里试过不同的数字),PHP5,APC,Nginx,memcached用于PHP会话存储.

MysqL被配置为占用大约30%的可用RAM(VPS上约150Mb,专用服务器上700Mb)

这似乎有一个瓶颈,不允许我走高,任何建议? (即我知道少于6个sql会使它更快,但这看起来不是一个限制因素,因为由于缓存的查询,sqld在顶部吃不超过几个百分点)

有没有人测试过踢preforked apache2并且只留下Nginx PHP要快得多?

更多基准

Small 40-byte static file: 1484 r/s via Nginx+apache2,2452 if we talk to apache2 directly. 
Small "Hello world" PHP script: 458 r/s via ngin+apache2.

更新:
似乎瓶颈是缓存数据的MysqL性能.
单个sql页面显示354req / sec,6个sql – 180 req / sec.
您认为我可以在这里调整什么? (我可以为MysqL派出100-200Mb)

[client]
port        = 3306
socket      = /var/run/MysqLd/MysqLd.sock

[MysqLd_safe]
socket      = /var/run/MysqLd/MysqLd.sock
nice        = 0

[MysqLd]
default-character-set=cp1251
collation-server=cp1251_general_cs

skip-character-set-client-handshake

user        = MysqL
pid-file    = /var/run/MysqLd/MysqLd.pid
socket      = /var/run/MysqLd/MysqLd.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/MysqL
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1

key_buffer      = 16M
max_allowed_packet  = 8M
thread_stack        = 64K
thread_cache_size   = 16
sort_buffer_size    = 8M
read_buffer_size    = 1M

myisam-recover      = BACKUP
max_connections        = 650
table_cache            = 256
thread_concurrency     = 10

query_cache_limit       = 1M
query_cache_size        = 16M

expire_logs_days    = 10
max_binlog_size         = 100M

[MysqLdump]
quick
quote-names
max_allowed_packet  = 8M

[MysqL]
[isamchk]
key_buffer      = 8M

!includedir /etc/MysqL/conf.d/
显然,你可以尝试很多.您最好的选择是为不使用索引(为其启用日志)和其他非优化查询查询追踪日志.多年来,我已经编制了大量与性能相关的选项,所以我在这里列出了一小部分供您参考 – 希望它有所帮助.
以下是您可以尝试的一些常规说明(如果您还没有):

MysqL

> query_cache_type = 1 – 缓存SQL查询已启用.如果设置为2,则只有在将sql_CACHE提示传递给它们时才会缓存查询.与类型1类似,您可以使用sql_NO_CACHE提示禁用特定查询的缓存
> key_buffer_size = 128M(默认值:8M) – MyISAM表索引的内存缓冲区.在专用服务器上,旨在将key_buffer_size设置为服务器上内存总量的至少四分之一,但不超过一半
> query_cache_size = 64M(默认值:0) – 查询缓存的大小
> back_log = 100(默认值:50,最大值:65535) – 未完成连接请求的队列.只有在短时间内有很多连接时才有意义
> join_buffer_size = 1M(默认值:131072) – 具有全表扫描时使用的缓冲区(无索引)
> table_cache = 2048(默认值:256) – 应该是max_user_connections乘以最重的SQL查询包含的最大JOIN数.在高峰时间使用“open_tables”变量作为指导.另请查看“opened_tables”变量 – 它应该接近“open_tables”
> query_prealloc_size = 32K(默认值:8K) – 用于语句解析和执行的持久内存.如果有复杂的查询,请增加
> sort_buffer_size = 16M(默认值:2M) – 有助于排序(ORDER BY和GROUP BY操作)
> read_buffer_size = 2M(默认值:128K) – 帮助进行顺序扫描.如果有许多顺序扫描,则增加.
> read_rnd_buffer_size = 4M – 排序后帮助MyISAM表加速读取
> max_length_for_sort_data – 要在排序文件中存储而不是行指针的行大小.可以避免随机表读取
> key_cache_age_threshold = 3000(默认值:300) – 将密钥缓存保留在热区(在降级为热门之前)的时间
> key_cache_division_limit = 50(默认值:100) – 启用更复杂的缓存逐出机制(两个级别).表示保持最低水平的百分比.
delay_key_write = ALL – 在每次索引更新时不会为表刷新密钥缓冲区,但仅在表关闭时才刷新.这会大大加快对密钥的写入速度,但是如果使用此功能,则应通过使用–myisam-recover = BACKUP,FORCE选项启动服务器来添加所有MyISAM表的自动检查
> memlock = 1 – 锁定内存中的进程(以减少交换/输出)

阿帕奇

>更改产卵方法(例如以mpm为单位)
>如果可能,禁用日志
> AllowOverride None – 尽可能禁用.htaccess.如果不使用它们,它会停止查找.htaccess文件的apache,因此它会保存文件查找请求
> SendBufferSize – 设置为OS默认值.在拥挤的网络上,您应该将此参数设置为接近通常下载的最大文件的大小
> KeepAlive Off(默认开启) – 并安装lingerd以正确关闭网络连接并且速度更快
> DirectoryIndex index.PHP – 保持文件列表尽可能短且绝对.
>选项FollowSymLinks – 简化Apache中的文件访问过程
>避免使用mod_rewrite或至少复杂的正则表达式
> ServerToken = prod

PHP

> variables_order =“GPCS”(如果您不需要环境变量)
> register_globals = Off – 除了存在安全风险外,它还会对性能产生影响
>尽可能减少include_path(避免额外的文件系统查找)
> display_errors = Off – 禁用显示错误.强烈建议所有生产服务器(如果出现问题,不会显示丑陋的错误消息).
> magic_quotes_gpc =关闭
> magic_quotes _ * =关闭
> output_buffering =开
>如果可能,禁用记录
> expose_PHP =关闭
> register_argc_argv =关闭
> always_populate_raw_post_data =关闭
>放置PHP.ini文件,PHP首先查找它.
> session.gc_divisor = 1000或10000
> session.save_path =“N; / path” – 对于大型网站,请考虑使用它.将会话文件拆分为子目录

操作系统调整

>使用-o noatime选项安装使用过的硬盘(无访问时间).还要将此选项添加到/ etc / fstab文件中.>调整/ proc / sys / vm / swappiness(从0到100)以查看最佳结果>使用RAM磁盘 – mount –bind -ttmpfs / tmp / tmp

猜你在找的PHP相关文章