博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提高服务器并发量,有关系统配置的常规方法
阅读量:5880 次
发布时间:2019-06-19

本文共 4558 字,大约阅读时间需要 15 分钟。

一般情况下, 服务器的性能除了编程技巧之外,还有一些操作系统本身的限制。这里我们假设服务器CPU 内存都是能满足需求的。来说说Linux 服务器的一些提高性能的方法。

  1. 文件描述符的限制
    对于服务器,每当有一个连接到来都要消耗一个文件描述符,即系统对文件描述符的限制就成了高性能的障碍。我们可以用ulimit可以查看当前系统对资源的一些限制。
# ulimit -acore file size          (blocks, -c) 0data seg size           (kbytes, -d) unlimitedscheduling priority             (-e) 0file size               (blocks, -f) unlimitedpending signals                 (-i) 15739max locked memory       (kbytes, -l) 64max memory size         (kbytes, -m) unlimitedopen files                      (-n) 120000pipe size            (512 bytes, -p) 8POSIX message queues     (bytes, -q) 819200real-time priority              (-r) 0stack size              (kbytes, -s) 8192cpu time               (seconds, -t) unlimitedmax user processes              (-u) 15739virtual memory          (kbytes, -v) unlimitedfile locks                      (-x) unlimited

这里可以看到有我们平时debug 程序的dump core 文件大小和文件描述符,消息队列一个消息的长度的限制等等。这里我们所看到的文件描述符,可以通过ulimit 进行配置

root:/etc# ulimit -SHn 500000root:/etc# ulimit -acore file size          (blocks, -c) 0data seg size           (kbytes, -d) unlimitedscheduling priority             (-e) 0file size               (blocks, -f) unlimitedpending signals                 (-i) 15739max locked memory       (kbytes, -l) 64max memory size         (kbytes, -m) unlimitedopen files                      (-n) 500000pipe size            (512 bytes, -p) 8POSIX message queues     (bytes, -q) 819200real-time priority              (-r) 0stack size              (kbytes, -s) 8192cpu time               (seconds, -t) unlimitedmax user processes              (-u) 15739virtual memory          (kbytes, -v) unlimitedfile locks                      (-x) unlimited

经过测试,确实生效,但是重启之后就恢复了,要想永久生效就要修改/etc/security/limits.conf文件

#
can have the two values:# - "soft" for enforcing the soft limits# - "hard" for enforcing hard limits##
can be one of the following:# - core - limits the core file size (KB)# - data - max data size (KB)# - fsize - maximum filesize (KB)# - memlock - max locked-in-memory address space (KB)# - nofile - max number of open files# - rss - max resident set size (KB)# - stack - max stack size (KB)# - cpu - max CPU time (MIN)# - nproc - max number of processes# - as - address space limit (KB)# - maxlogins - max number of logins for this user# - maxsyslogins - max number of logins on the system# - priority - the priority to run user process with# - locks - max number of file locks the user can hold# - sigpending - max number of pending signals# - msgqueue - max memory used by POSIX message queues (bytes)# - nice - max nice priority allowed to raise to values: [-20, 19]# - rtprio - max realtime priority# - chroot - change root to directory (Debian-specific)##
##* soft core 0#root hard core 100000#* hard rss 10000#@student hard nproc 20#@faculty soft nproc 20#@faculty hard nproc 50#ftp hard nproc 0#ftp - chroot /ftp#@student - maxlogins 4root soft nofile 120000root hard nofile 120000* soft nofile 120000* hard nofile 120000# End of file

在文件里面添加

1.     soft    nofile      120000 2.     hard    nofile      120000

这里的soft 个数一定要小于等于hard个数,重启后生效。

另外,如果想看一个正在运行的进程的资源限制,可以到/proc/进程id/ 下的limits文件里面查看。
2. 端口号限制
对于服务器来讲一般只需要开放一个端口号, 但是某些应用,需要多个端口号例如nginx 反向代理。这里如果正常情况下Nginx只能转发30000多个连接,因为默认情况下系统开放的端口号是3万多 - 65535之间。Nginx 反向代理转发时需要随机端口去转发,默认只能是3万多。

对于端口号可以通过sysctl -a 查看。

root:~# sysctl -a | grep localfs.nfs.nsm_local_state = 0net.ipv4.conf.all.accept_local = 0net.ipv4.conf.all.route_localnet = 0net.ipv4.conf.default.accept_local = 0net.ipv4.conf.default.route_localnet = 0net.ipv4.conf.docker0.accept_local = 0net.ipv4.conf.docker0.route_localnet = 0net.ipv4.conf.eth0.accept_local = 0net.ipv4.conf.eth0.route_localnet = 0net.ipv4.conf.lo.accept_local = 0net.ipv4.conf.lo.route_localnet = 0net.ipv4.conf.vethc30f7f2.accept_local = 0net.ipv4.conf.vethc30f7f2.route_localnet = 0net.ipv4.ip_local_port_range = 32768    61000net.ipv4.ip_local_reserved_ports = net.ipv4.ip_nonlocal_bind = 0

这里还不到3万 。对于这个限制可以修改/etc/sysctl.conf 来实现 添加 net.ipv4.ip_local_port_range = 1024 65535.

修改后运行sysctl -p 或重启即可生效。 但是即使这样也只能转发6万多个链接。 如果要增加转发数量,这里可以在后端server 多加虚拟IP 添加网卡别名

ifconfig eth0:1 192.168.1.11 netmask 255.255.255.0 up

这样后端server就添加了一个虚拟IP, 然后再修改Nginx配置文件,用负载均衡这种方式进行转发。或者也可以把虚拟IP加在Nginx这边,把IP映射到统一的域名即可。有关内核参数的详细解释请看:

 

转载于:https://www.cnblogs.com/MaAce/p/7755710.html

你可能感兴趣的文章
实现基于组织机构的数据集权限系统的设计思路讲解【提供完整数据库设计下载】...
查看>>
docker-py execute echo无效
查看>>
Spring Boot Redis Cache应用
查看>>
Handler学习
查看>>
SQL Server 监视(Monitoring)体系架构
查看>>
SQLSERVER群集故障转移笔记
查看>>
我的友情链接
查看>>
业务相关同步机制
查看>>
DHCP服务
查看>>
C# 获得本机IP、端口等信息地址以及服务器IP信息
查看>>
HTTP请求头图片打开
查看>>
linux 安装Swagger(swagger-editor , swagger-ui)
查看>>
NTP时间服务器
查看>>
Java中JFrame的getContentPane()和setContentPane()方法使用说明
查看>>
eclipse/myeclipse 中的一些常用的快捷键
查看>>
Nginx +keepalived+tomcat 实现高可用+负载均衡
查看>>
rsync的使用
查看>>
查询Oracle剩余表空间语句+temp临时表空间使用率语句
查看>>
CCNA学习指南 第一、二章 下载
查看>>
linux驱动打印当前进程名命令与 pid
查看>>