优化lighttpd以提升性能

2024-02-02 09:32
文章标签 优化 性能 提升 lighttpd

本文主要是介绍优化lighttpd以提升性能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Lighttpd的优化是多方面的,最重要的就是优化其性能。操作系统有2大因素,可以帮助Lighttpd达到它的最佳性能。

HTTP Keep-Alive

禁用Keep-Alive可以帮助你的服务器减轻因大量打开着的文件描述符而产生的负载。
服务器默认的设置是:
server.max-keep-alive-requests = 128
server.max-keep-alive-idle = 30
server.max-read-idle = 60
server.max-write-idle = 360
在单个连接处理一行128个Keep-Alive的请求,在一个未被使用的Keep-Alive连接被Lighttpd丢弃之前等待30秒。

如果你在一个高负载环境下一次处理许多连接(假设在24小时内有500个平行连接),那你可能陷入了如下描述的
out-of-fd问题。
server.max-keep-alive-requests = 4
server.max-keep-alive-idle = 4
这样可以提前释放连接,并在不损失性能的情况下释放文件描述符。

完全禁用Keep-Alive是解决文件描述符短缺的最后手段:
server.max-keep-alive-requests = 0

事件处理器

首先是和通知服务器一个连接是否已经准备好发送或接收数据相关的事件处理器。
正如你所看到的,每一个操作系统至少有select()调用,但它有所限制。
OSMethodConfig Value
allselectselect
Unixpollpoll
Linux 2.4+rt-signalslinux-rtsig
Linux 2.6+epolllinux-sysepoll
Solaris/dev/pollsolaris-devpoll
FreeBSD, ...kqueuefreebsd-kqueue
NetBSDkqueuekqueue
有关这个话题的更多信息,请参看 http://www.kegel.com/c10k.html

配置

事件处理器可以由指定的server.event-handler"配置值"(在上表列出)来设置。
例如:
server.event-handler = "linux-sysepoll"
网络处理器

对于所有平台最基本的网络界面位于read()和write()的系统调用。
每个现代操作系统都提供它自己的系统调用来帮助网络服务器尽可能快地传输文件。
如果你想从Web服务器发送一个文件,就是把文件拷贝进Web服务器然后仅为调用write()把它"写"进socket套接字,这根本行不通。

sendfile() 能在应用程序这方面最小化该项工作并把一个文件直接地(有创意地)推进网卡。

lighttpd 支持所有主要的指定了系统的调用:

OSMethodConfig Value
allwritewrite
Unixwritevwritev
Linux 2.4+sendfilelinux-sendfile
Linux 2.6+sendfile64linux-sendfile
Solarissendfilevsolaris-sendfilev
FreeBSDsendfilefreebsd-sendfile

最佳的后台已经在编译时选择。如果你想另选后台:
server.network-backend = "writev"
你可以在这里找到更多有关后台的信息:http://blog.lighttpd.net/articles/2005/11/11/optimizing-lighty-for-high-concurrent-large-file-downloads

最大连接数

由于 lighttpd 是一个单线程的服务器,它最大的资源限制是描述符的限制,在大部分平台上被设置为1024。如果你正运行着一个大流量站点,你也许会想把这个值设置得更大些:

server.max-fds = 2048

这个设置仅在Lighttpd以root身份运行时生效。

Out-of-fd 的情况

由于文件描述符为TCP/IP套接字所用,文件和目录,一个对PHP页面的请求也许会占用3个文件描述符

  1. TCP/IP套接字到客户端的连接
  2. TCP/IP 和 Unix 域套接字到FastCGI进程
  3. 文件句柄到位于文档根目录的文件:检查文件是否存在

如果 lighttpd 超出了文件描述符的数量,它会暂时拒绝接受任何新发起的连接以便使用现有的文件描述符来处理当前运行的请求。

如果多于 90% 文件描述符被占用,那么对新连接的处理会被禁用.。如果文件描述符占用率降到 80% 以下,那么Lighttpd会重新接受新连接。

某些情况下你可以在错误日志里看到:

... accept() failed: Too many open files

这告诉你,曾同时发起过过量的新请求,Lighttpd一度无法迅速禁用入站连接。连接已被放弃,客户端会收到类似"connection failed"这样的出错信息。这种情况很稀少,可能仅在测试状态中发生.

放宽 server.max-fds 限制将使这种情况发生的可能性减少。

stat() 缓存

一个 stat(2) 可能很贵重;缓存它可以节省时间和环境的切换。

除了每次使用 stat() 检查一个文件的存在性,你可以 stat() 它一次然后监视此目录此文件的改动情况。只要目录不改变在其中的文件必定仍是原来的。

在 FAM 或者是 gamin 的帮助下,你可以使用内核事件来保证你的stat缓存是最新的。不一般的是你可以使用"simple" 方法,它可以在至多一秒内缓存结果。

启用 stat 缓存可以显著提升高负载服务器的性能。

server.stat-cache-engine = "fam"   # 可以是 fam, simple 或者 disabled(禁用)

有关FAM的更多信息,参见 http://oss.sgi.com/projects/fam/faq.html
有关gamin的更多信息,参见http://www.gnome.org/~veillard/gamin/overview.html

另请参见: http://trac.lighttpd.net/trac/wiki/server.stat-cache-engineDetails

特定平台的说明

Linux

对于 Linux 2.4.x 你应该考虑使用 --disable-lfs 参数编译Lighttpd 来禁用对大于2GB文件的支持。lighttpd 将回到 writev() + mmap() 网络调用(也可以正常运行),但在大于2GB文件方面,可能速度不快。

禁用 TCP 选项减少每个 TCP 包的总开销,可能有助于利用服务器最后那点性能。注意禁用这些选项极可能降低处理高隐性和有损的链接。

  • net.ipv4.tcp_sack = 0
  • net.ipv4.tcp_timestamps = 0

增大 TCP 发送和接收缓冲将提升服务器性能,当(且仅当)你有很多大文件要发送。

  • net.ipv4.tcp_wmem = 4096 65536 524288
  • net.core.wmem_max = 1048576

如果你有许多大文件的上传,增加接收缓冲会对性能提升有所帮助。

  • net.ipv4.tcp_rmem = 4096 87380 524288
  • net.core.rmem_max = 1048576

一些对大流量站点非常有效的东西:

# 这样保证了 TIME_WAIT 端口既不被拒也不快速关闭
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1
# TCP 内存
net.core.rmem_max = 16777216
net.core.rmem_default = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

# you shouldn't be using conntrack on a heavily loaded server anyway, but these are
# suitably high for our uses, insuring that if conntrack gets turned on, the box doesn't die
net.ipv4.ip_conntrack_max = 1048576
net.nf_conntrack_max = 1048576

记住每个 TCP 连接为套接字缓冲占用指定份额内存。如果你的服务器接到大量连接,那么它们会快速消耗剩余内存。

关于这些参数的更多信息,参见 http://www.acc.umu.se/~maswan/linux-netperf.txt

FreeBSD

在 FreeBSD 上你可以通过启用accept filters来增加一些性能。只要在所编译的内核文件里加入:

options   ACCEPT_FILTER_HTTP

或者简单地用如下命令加载:

kldload accf_http

打开/etc/rc.conf设置:
accf_data_load="YES"
accf_http_load="YES"

更多调整 FreeBSD 的信息,请阅读:tuning(7)

如果服务器仅处理无大文件上传的HTTP请求,减少 recvspace 总是有效的。如果你有大量大型文件要发送,增加 sendspace 可以减少系统负载,但请记住你必须在内核里提供每个连接的内存。1024 * 64KB 意味着内核RAM中的64MB。请记住。

  • net.inet.tcp.recvspace = 4096

这篇关于优化lighttpd以提升性能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670271

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689