Linux环境下高并发服务器构建手记

最近用Golang做了一个项目,产品需求是“单服要达到5000并行处理”

硬件配置如下:

CPU:Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz

MEM:32G

DISK:SCSI 600G 10000转/秒

OS:Centos 6.6

好了,先解决并发连接问题,对linux系统环境做了一些优化,优化过程如下:

优化内核参数:

1:修改系统资源限制文件:/etc/security/limit.conf

参照配置文件帮助描述,添加如下配置

* hard nofile  1025500
* soft nofile  1025500
server  hard nproc   181960
server  soft nproc   181960

2:修改系统控制配置文件:/etc/sysctl.conf

添加如下配置,每个选项是请自行百度或查阅相关书籍

添加完后记得:sysctl –p 以确保起作用

fs.file-max=1025500
net.nf_conntrack_max=1025500
net.netfilter.nf_conntrack_max=1025500
net.core.netdev_max_backlog=30000
net.core.somaxconn=10000
net.core.rps_sock_flow_entries=32768
net.ipv4.tcp_max_syn_backlog=10000
net.ipv4.tcp_max_tw_buckets=10000
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_synack_retries=10
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_keepalive_time=180
net.ipv4.tcp_keepalive_intvl=30

net.ipv4.tcp_keepalive_probes=5
net.ipv4.ip_local_port_range=1024 65535

kernel.sem = 10240 671078400 10240 65535

好了,到此为止,已经可以达到并发连接100W,是没问题了,但并意味着单个物理机就能并行处理

100W,还会受各种IO限制比如磁盘IO等等.

此时测试单服处理能力:1500并发连接,每个连接处理200个事务

测试结果:根据统计结果,有513笔业务处理时长超过1s,单笔处理时长最长已达:1min24s

显然这个结果离产品需求相去甚远,为了取得更好性能需求,下面做进一步的负载均衡,我

首先采用广受赞誉的nginx做一个简单的负载均衡

Nginx负载均衡设置:

在http节点添加如下设置:

map $http_upgrade $connection_upgrade {
        default upgrade;
        ‘‘      close;
    }
   upstream honorServer {
    server 127.0.0.1:6620 weight=2;
    server 127.0.0.1:6520;
   }

   server {

         listen       7878;   
         server_name localhost;

        location / {

            proxy_pass http://honorServer;

            proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
        }
    }

未完待续…

时间: 2024-11-08 03:41:52

Linux环境下高并发服务器构建手记的相关文章

衡阳高防服务器租用Linux环境下架设DNS服务器教程

衡阳高防服务器租用Linux环境下架设DNS服务器教程 DNS是域名系统Domain Name System的缩写,是一种组织域层次结构的计算机和网络服务命名系统.当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与此名称相关的IP地址信息.本文就带领大家在Linux环境下建立一个DNS服务器. 一.相关知识概述 DNS(Domain Name System)即域名服务系统,作用是完成域名与IP地址的互换.网络上的每一台主机都有一个域名,域名给出有关主机的IP地址.MAIL路由信息

阿里云ECS服务器Linux环境下配置php服务器(二)--phpMyAdmin篇

首先说明,以下文本内容用vim编辑麻烦 可参考阿里云ECS服务器Linux环境下配置php服务器(一)--基础配置篇 这一次我们来继续说说phpMyAdmin的安装. 什么是phpMyAdmin?phpMyAdmin是一种mysql的管理工具,它可以直接通过网页来管理你的MySQL,当然,phpMyAdmin不是必要的,如果你不安装phpMyAdmin,一样可以通过mysql的命令行来管理你的mysql. 开始安装. 首先找到phpMyAdmin的下载地址(推荐官网地址https://www.p

linux学习之高并发服务器篇(二)

高并发服务器 1.线程池并发服务器 两种模型: 预先创建阻塞于accept多线程,使用互斥锁上锁保护accept(减少了每次创建线程的开销) 预先创建多线程,由主线程调用accept 线程池 3.多路I/O转接服务器 三种模型性能分析 select模型 select用来阻塞监听4,5,6,7是否有数据传入,若7这个文件描述符有数据到达,select返回就绪文件描述符个数,若检测到7有数据接收,accept接收客户链接请求,创建一个新的文件描述符. select (1)select能监听的文件描述

阿里云ECS服务器Linux环境下配置php服务器(三)--项目部署篇

今天我们来讲一下,如何将你本地开发好的项目,部署到Linux服务器上. 因为我本地开发环境是Windows(Mac下配置PHP实在是不熟练),所以今天的软件都是以Windows为例. 首先我们要把本地的php相关的文件,上传到服务器上,这一步可以使用xftp工具. 下载一个xftp,安装完成后,打开,新建一个会话,具体如下:  注意协议选SFTP,端口号22. 然后把你php的文件拖到服务器上,直接拖动即可:  然后把我们本地的数据库导入到服务器: 首先打开本地的phpMyadmin,导出一个.

linux环境下搭建svn服务器

前提: linux为cenos ; 安装了yum ; 1.进入linux,执行yum直接下载安装 yum install svbversion 2,查看svn安装位置 rpm -ql subversion 3.创建svn的版本库目录 makdir -p /var/svn/svnrepos 4.创建版本库 svnadmin create /var/svn/svnrepos 执行3.4后会在svnrepos下生成文件: 5.了解该svn版本库配置文件 conf目录 cd conf #进入该版本库的配

linux环境下安装apache服务器

首先注明下面的操作都是在root下执行或者使用sudo命令. 1)去http://httpd.apache.org/download 下载apache源码 2)解压到/usr/src,在下载目录执行tar -zxvf httpd-x.x.x.tar.gz -C /usr/src  (我用的是httpd-2.4.3.tar.gz) 3)进入目录/usr/src/httpd-2.4.3,执行:./configure --prefix=/usr/local/apache2 --with-mpm=wor

linux环境下搭建MySQL数据库的双击热备

准备服务器 由于Mysql不同版本之间的(二进制日志)binlog格式可能会不太一样,因此最好的搭配组合是主(Master)服务器的Mysql版本和从(Slave)服务器版本相同或者更低,主服务器的版本肯定不能高于从服务器版本.本次我用于测试的两台服务器版本都是Mysql-5.5.17. Mysql 建立主-从服务器双机热备配置步骤 2.1环境描述A服务器(主服务器Master):59.151.15.36B服务器(从服务器Slave):218.206.70.146主从服务器的Mysql版本皆为5

Linux下高并发socket最大连接数所受的各种限制(详解)

1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄).可使用ulimit命令查看系统允许当前用户进程打开的文件数限制: [[email protected] ~]$ ulimit -n1024 这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中

Linux下高并发socket最大连接数所受的各种限制

1.修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄).可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:[[email protected] ~]$ ulimit -n1024这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除