8 核 32 内存服务器 lnmp 如何优化配置文件可以避免访问高峰期频繁 502?

2015-09-25 23:17:29 +08:00
 liyucmh

如题, 是一个 wordpress 图片站, 日均 ip1.5w, pv20w 左右
同时在线 500 人左右 就会频繁 502 cpu 达到
load average: 15.04, 15.60, 14.93

cpu 是 Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz 8 核心独立服务器
内存 32GB

装有 wp-super cache 缓存插件

cengos 7 64 位, nginx mysql pphp 版本都是目前最新的稳定版.

用的是 lnmp 一键安装包, 不懂其他优化

请大神帮忙看看要如何优化 解决晚上晚上高峰期 访问频繁 502 的问题

谢谢!

10147 次点击
所在节点    问与答
36 条回复
bsder
2015-09-27 19:03:47 +08:00
另外可以试着开启 PHP 和 MySQL 的 slowlog 来验证一下
liyucmh
2015-09-28 09:41:46 +08:00
@bsder 感谢关注解决
mysql 配置文件 my.cnf 默认的

[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock

# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
datadir = /usr/local/mysql/var
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
#log-bin=mysql-bin

# binary logging format - mixed recommended
#binlog_format=mixed

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1

# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /usr/local/mysql/var
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/var
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout


慢日志开启了,都是这些提醒, 超时设置为 5s
都是这些重复
[26-Sep-2015 15:08:07] [pool wwwroot] pid 4492
script_filename = /home/wwwroot/sample.com/index.php
[0x00007f9a83f8dc68] mysqli_query() /home/wwwroot/sample.com/wp-includes/wp-db.php:1739
[0x00007f9a83f8daf8] _do_query() /home/wwwroot/sample.com/wp-includes/wp-db.php:1645
[0x00007f9a83f8d988] query() /home/wwwroot/sample.com/wp-includes/wp-db.php:2195
[0x00007f9a83f8d7c8] get_results() /home/wwwroot/sample.com/wp-content/themes/sample/widgets/wid-comment.php:82
[0x00007f9a83f8d5b8] mod_newcomments() /home/wwwroot/sample.com/wp-content/themes/sample/widgets/wid-comment.php:30
[0x00007f9a83f8d470] widget() /home/wwwroot/sample.com/wp-includes/widgets.php:329
[0x00007ffe5d148ab0] display_callback() unknown:0
[0x00007f9a83f8d290] call_user_func_array() /home/wwwroot/sample.com/wp-includes/widgets.php:1272
[0x00007f9a83f8d160] dynamic_sidebar() /home/wwwroot/sample.com/wp-content/themes/sample/sidebar.php:12
[0x00007f9a83f8cfd0] +++ dump failed
bsder
2015-09-28 11:06:58 +08:00
数据库的配置调大一点, 可以简单的用 /usr/share/mysql/my-huge.cnf 为模板来修改。
liyucmh
2015-09-28 11:10:36 +08:00
@bsder 你好, 我用的最新的 mysql 没有那个文件
liyucmh
2015-09-28 11:15:44 +08:00
@bsder 我升级到了最新的 5.6.26 没找到那个文件 能不能根据我的配置 帮我配置一份呢 非常感谢.
bsder
2015-09-28 12:47:43 +08:00
看你配置文件,应该是在 /usr/local/share/mysql/my-huge.cnf
ericls
2015-09-29 02:40:37 +08:00
这一切跟 nginx 应该没关系 你的 PHP 是什么跑的就看什么的日志
liyucmh
2015-09-29 11:24:34 +08:00
@ericls 具体是什么意思呢 没明白过来
liyucmh
2015-09-29 11:25:21 +08:00
@bsder 我装的是最新的 5.6.26 找了整个系统的文件 没找到那个 my-huge.cnf 文件.
ericls
2015-09-29 13:11:49 +08:00
@liyucmh nginx 只是个代理服务器 除了 perl 好像什么脚本都不是 nginx 自己在跑 你可以看到你的 nginx 配置文件在处理 php 的时候 是代理 php-fpm 或者是什么
liyucmh
2015-09-29 21:24:46 +08:00
@bsder 你好 找到了那个文件 把配置文件重命名为 my.cnf 重启 mysql 启动不起来 提示 Starting MySQL... ERROR! The server quit without updating PID file

请问替换了里面还要修改什么文件
bsder
2015-09-29 23:17:57 +08:00
你的 datadir 有修改成你原来 my.cnf 的路径吗?启动不了看 datadir 下或者 /var/lib/mysql 下主机名.err 的 MySQL 日志文件(取决于你当前 MySQL 启动的 datadir 参数)
liyucmh
2015-09-30 10:19:08 +08:00
@bsder 感谢 改好了 可以启动了 然而问题依旧 还是负载很高 好像还更频繁 502 放弃了 换回原来默认的配置了
liyucmh
2015-10-01 12:56:35 +08:00
@bsder 很奇怪 有时候 300 多人同时在线 负载也不会超过 5
但是有时 200 多人 负载就超过了 20 以上
是什么原因呢 用户的行为应该都是差不多的吧

难道是因为被攻击的缘故吗?

可是我上了 cdn 攻击者不会知道我的真实 ip 还是说只要 有攻击负载就会上升 不管你上不上 cdn?
bsder
2015-10-01 19:49:09 +08:00
@liyucmh no pic no jb ,不开日志不 debug 凭猜测凭经验难以找出问题的根本。提供的信息片面,我看不出啥问题。好好看看统计或者自己分析下 nginx access 日志,负载高的时段,那些 url 被频繁访问。猜测是有 php 脚本在大量占用 cpu 资源吧。
feicao111
2016-01-10 15:00:30 +08:00
pm = dynamic
pm.max_children = 1024
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 1024

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/223750

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX