暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于对Nginx和MySQL的性能配置优化【测试成功】

巴韭特锁螺丝 2024-08-21
53

一、问题背景

    在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**:每个线程进行排序操作时所使用的缓冲区大小。默认值通常就足够了,除非你的应用程序执行了大量的复杂排序。
      复制


      文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论