我正在做一个测试,看看我的服务器期望什么样的性能。我将几个PHP页面放在一起,每个页面在JSON中将500条记录发布到一个api端点,该端点将其解析为数据库插入。
使用Apache,我有两个不同的服务器,每个服务器访问不同的页面,同时使用30个并发会话来查看发生了什么。服务器具有以下状态:
2X Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz (8 core, 16 thread each)
96GB DDR3
PCI SSD下面是top命令的示例:
4904 mysql 20 0 10.916g 1.634g 20300 S 186.0 1.7 80:58.56 mysqld
9098 root 20 0 342652 45288 22504 R 100.0 0.0 0:08.12 php7.0
9058 www-data 20 0 473720 53932 21612 S 31.9 0.1 0:09.95 apache2
9051 www-data 20 0 474024 54484 21880 S 31.6 0.1 0:09.64 apache2
7287 www-data 20 0 474528 58100 25056 S 31.2 0.1 2:09.70 apache2
7466 www-data 20 0 474668 56876 23724 S 30.6 0.1 1:23.09 apache2
7689 www-data 20 0 474672 56972 23832 S 30.2 0.1 1:36.35 apache2
9061 www-data 20 0 473720 53928 21604 S 30.2 0.1 0:09.68 apache2
7470 www-data 20 0 472532 55028 23876 S 28.2 0.1 1:50.36 apache2
7497 www-data 20 0 472004 52788 22108 S 27.9 0.1 2:01.92 apache2
9056 www-data 20 0 471672 51860 21588 R 27.6 0.1 0:09.10 apache2
7662 www-data 20 0 472428 53236 22344 S 27.2 0.1 1:17.66 apache2
7073 www-data 20 0 472180 52872 22152 S 26.6 0.1 2:27.52 apache2
7531 www-data 20 0 472020 52988 22288 S 26.6 0.1 1:59.16 apache2
7691 www-data 20 0 472520 54976 23844 S 26.2 0.1 1:35.05 apache2
7457 www-data 20 0 472036 52708 22072 S 25.9 0.1 1:28.16 apache2
7516 www-data 20 0 475904 58368 26900 S 25.9 0.1 1:56.30 apache2
7690 www-data 20 0 472512 55036 23896 S 25.9 0.1 1:20.92 apache2
7118 www-data 20 0 472004 52836 22152 S 25.6 0.1 2:47.01 apache2
9050 www-data 20 0 473744 54236 21824 S 24.9 0.1 0:09.22 apache2
9046 www-data 20 0 473720 53944 21620 S 24.6 0.1 0:08.97 apache2
7534 www-data 20 0 472004 52836 22176 S 23.9 0.1 1:43.85 apache2
9060 www-data 20 0 473720 53944 21620 S 23.9 0.1 0:08.67 apache2
7285 www-data 20 0 472532 53972 22960 S 23.6 0.1 1:52.67 apache2
9055 www-data 20 0 473720 54044 21716 S 23.6 0.1 0:08.67 apache2
7512 www-data 20 0 472428 53112 22176 S 23.3 0.1 1:41.66 apache2
9052 www-data 20 0 473720 53928 21604 S 23.3 0.1 0:08.67 apache2
9053 www-data 20 0 471688 52268 21888 S 23.3 0.1 0:08.24 apache2
7122 www-data 20 0 472004 52908 22240 S 22.9 0.1 2:08.46 apache2
9057 www-data 20 0 471696 52096 21736 S 22.9 0.1 0:08.26 apache2
7283 www-data 20 0 472012 52888 22224 S 22.6 0.1 2:05.82 apache2
7535 www-data 20 0 472632 55088 23888 S 21.6 0.1 1:59.44 apache2
7294 www-data 20 0 757440 342200 26248 S 7.0 0.3 2:00.95 apache2 毫不奇怪,我们看到了很多apache会话。然而,当服务器负载达到55时,我感到惊讶,然而,在导航时,该网站的响应却一如既往。我想,如果有两个CPU,每个线程都有16个线程,那么就会有32个线程被关闭,但我想超线程的速度会达到64,然后才会出现滞后。
我知道MySQL内置了一些多线程,所以我不应该担心据我理解它的报告使用率是186%,但是在什么时候我应该考虑MySQL实例的CPU利用率并开始考虑分片或其他负载平衡考虑呢?
我可以轻松地将处理过程的apache部分卸载到其他服务器,并且在需要时都将它们绑定到同一个MySQL服务器上,因此我主要关注MySQL的使用,以便观察它是否需要注意。
任何小贴士都会很感激。
发布于 2018-03-14 04:14:04
基准通常是为了找到“临界点”而设计的。您极不可能同时激活32个用户。一个小时内你需要多少INSERTs。您的32个用户将做他们的事情,然后完成一天。这平均为很少插入/小时。
至于“延迟前到达64”,这在很大程度上取决于MySQL的哪个版本。在InnoDB自己绊倒之前,5.7可能能够处理64个活动用户。5.0在4或8的时候会有麻烦。
如果您完全关闭查询缓存:query_cache_type = 0和query_cache_size = 0,这将有所帮助。QC是个瓶颈。
我习惯于让几个Apache服务器(每个服务器都在自己的服务器上)与几个MySQL从服务器进行对话。当Apache允许太多的web页面启动并开始超过MySQL多线程的上述阈值时,问题就来了。结果证明,最好减少Apache中的线程数。
正确的编号取决于网页代码、查询等。
https://dba.stackexchange.com/questions/200137
复制相似问题