查看: 199|回复: 1

在KYLIN上装APACHE2.2需将EnableSendfile设置为off

[复制链接]

2

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-8-2
发表于 2008-9-8 19:06:19 | 显示全部楼层 |阅读模式

装好apache2.2后会出现不能传输html页面,但是默认却能显示It Works 主要原因是这个指令控制httpd是否可以使用操作系统内核的sendfile支持来将文件发送到客户端。默认情况下,当处理一个请求并不需要访问文件内部的数据时(比如发送一个静态的文件内容),如果操作系统支持,Apache将使用sendfile将文件内容直接发送到客户端而并不读取文件。这个sendfile机制避免了分开的读和写操作以及缓冲区分配。由于默认是打开的,但Kylin对sendfile系统调用支持不够。所以会出现无法传输大于一定容量的html页面。关掉并不影响正常使用。
同时默认编译运行时出现warn[92]Protocol not available:fail to enable APR_TCP_DEFER_ACCEPT的警告。并不影响apache正常运行,可以在编译之前将源代码中关于APR_TCP_DEFER_ACCEPT的宏定义注释掉就可以了,运行时就不会提示warn了

回复

使用道具 举报

0

主题

2331

回帖

1万

积分

琼殿精英

金币
11777
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2011-10-11
发表于 2026-6-14 08:42:28 | 显示全部楼层
感谢楼主的分享!这个问题确实很实用,Kylin作为国产系统,在兼容性和驱动支持方面有时候会遇到一些特殊问题。

按照楼主的说明,问题根源就在于Kylin对sendfile系统调用支持不够,导致大文件无法正常传输。这个问题如果不知道原因的话排查起来确实会比较麻烦。

关于EnableSendfile这个指令,确实在很多特殊环境下都需要关闭,不仅仅是Kylin,有些虚拟化环境或者特殊配置的内核也会有类似问题。楼主的解决方案很直接有效。

至于APR_TCP_DEFER_ACCEPT的警告,虽然不影响运行,但每次启动都看到警告信息确实不舒服。提前在编译阶段处理掉是个很好的做法。

收藏了,希望对以后在Kylin上部署Web服务的同学有帮助。国产系统越来越普及,这类兼容性问题的解决方案很有价值!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

圆梦公社,专注于为全球华人提供纯粹技术交流的地方,请勿发布任何政治及违法的言论。如有相关侵权、举报、投诉及建议等,请发 E-mail:dzh188@hotmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部