文章讲述了关于Nginx和MySQL的性能配置优化。文章首先介绍了问题背景,然后介绍了Nginx启动时的错误提示,表明worker_connections超出了系统的文件描述符限制。
关于对Nginx和MySQL的性能配置优化【测试成功】
原创 巴韭特锁螺丝 巴韭特锁螺丝 2024年08月21日 00:00 陕西
一、问题背景
在14核心、64G内存的服务器运行业务系统,用户普遍反馈加载卡顿,且CPU占用很高,将其扩容到40核心CPU,其他不变。调整对应程序参数。
二、Nginx配置优化
1、nginx 启动时提示 file resource limit
[root@cheliangweb mysql]# nginx
nginx: [warn] 100000 worker_connections exceed open file resource limit: 1024
这个警告表示 Nginx 的工作进程数 worker_connections 超过了系统的文件描述符限制。Nginx 在处理并发连接时需要使用文件描述符,而文件描述符的数量受到系统的限制。
解决:
(1)查看系统文件描述符限制:ulimit -n
如果限制较低,需要修改系统的文件描述符限制。这可以在用户的 shell 配置文件(例如 ~/.bashrc 或 /etc/security/limits.conf)中进行设置。
ulimit -n 4096
(2) 修改 Nginx 配置:
找到worker_connections参数,并确保其值不超过文件描述符限制。
(3)重启Nginx
2、nginx线程与连接优化
(1)启用 Keep-Alive参数:
keepalive_timeout 65;
(2)合理配置worker_processes 参数
这个值的设定应该根据服务器的硬件配置和工作负载来合理选择。并不是越大越好,而是要根据具体情况进行调优。
CPU 核数: 通常,可以将 worker_processes 设置为等于服务器的 CPU 核数,以充分利用服务器的多核性能。服务器有超线程(Hyper-Threading)技术,可以考虑将其设置为实际物理核心数的一半。
并发连接数: 考虑到每个 Nginx 工作进程能够处理的并发连接数,根据预计的并发请求量适度调整。可以通过以下公式估算:
worker_connections 参数用于配置每个 Nginx 工作进程能够处理的最大并发连接数。
并发连接数 = worker_processes * worker_connections
三、Mysql配置优化
重要性能参数优化:
innodb_buffer_pool_size:
这个参数决定了 InnoDB 存储引擎使用的内存缓冲池大小。通常建议将其设置为物理内存的 50-75%。
例如,如果服务器有 16GB 的内存,可以设置为 innodb_buffer_pool_size = 12GB。
innodb_log_file_size:
这个参数决定了 InnoDB 存储引擎的事务日志文件大小。一般建议设置为 1GB 或更大。
例如,可以设置为 innodb_log_file_size = 1GB。
query_cache_size:
该参数控制查询缓存的大小。对于高写入负载的数据库,建议将其设置为 0,因为查询缓存在高并发写入场景下性能不佳。
对于读密集型的数据库,可以考虑启用查询缓存,并设置一个适当的大小。通常,可以设置为物理内存的一小部分,例如 query_cache_size = 256MB。
示例:服务器CPU核心数40,64G内存,1000M带宽,这些参数应该怎么设置?
在具有40个CPU核心和64GB内存的服务器上,以下是MySQL配置参数的一些推荐设置。请注意,这些只是一般的建议,实际的最佳值可能会根据你的具体应用和工作负载有所不同。
1. **innodb_buffer_pool_size**:这是InnoDB存储引擎用于缓存数据和索引的内存大小。对于专用的MySQL服务器,通常将此值设置为系统内存的70-80%。可以设置为44GB(约等于64GB的70%)。
2. **innodb_log_file_size**:这是InnoDB存储引擎的重做日志文件大小。一个常见的建议是将其设置为innodb_buffer_pool_size的25%。可以设置为11GB。
3. **innodb_flush_log_at_trx_commit**:这个参数决定了InnoDB存储引擎何时将日志刷新到磁盘。如果需要最高的数据持久性,可以将其设置为1。可以接受在崩溃时丢失一秒钟的事务,可以将其设置为2,这通常可以提供更好的性能。
4. **query_cache_size**:这是查询缓存的大小。然而,对于具有大量内存的服务器,查询缓存可能会成为性能瓶颈。在许多情况下,最好将query_cache_size设置为0,以禁用查询缓存。
5. **max_connections**:这是MySQL服务器允许的最大并发连接数。这个值取决于你的应用程序的并发需求。一个常见的开始值是100,但你可能需要根据你的应用程序的需求进行调整。
6. **thread_cache_size**:这是线程缓存的大小。一个常见的建议是将其设置为max_connections的10%。在你的情况下,如果max_connections设置为100,那么thread_cache_size可以设置为10。
7. **table_open_cache**:这是表缓存的大小。一个常见的建议是将其设置为max_connections的2倍。在你的情况下,如果max_connections设置为100,那么table_open_cache可以设置为200。
8. **sort_buffer_size**:每个线程进行排序操作时所使用的缓冲区大小。默认值通常就足够了,除非你的应用程序执行了大量的复杂排序。
来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。
Copyright©2013-2024 JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利
苏公网安备32010402000125 苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司
南京思必达教育科技有限公司版权所有 百度统计