当显示一个目录中的 2,50,000 个文件时,Linux 上的 Apache 2.2 太慢了

当显示一个目录中的 2,50,000 个文件时,Linux 上的 Apache 2.2 太慢了

使用 Web 浏览器,我需要访问 Linux 服务器上一个包含大约 200,000 个文件的目录。

我正在使用 apache 中的“Alias”指令来实现此要求。请参见下文 -

Alias /barcodes/ "/m01/apps/codes/barcodes/"

<Directory "/m01/apps/codes/barcodes/">
Options +Indexes
IndexOptions +TrackModified
AllowOverride None
Order allow,deny
Allow from all
#Doing IndexOrderDefault so to see the files in a descending order (by date/timestamp)
IndexOrderDefault Descending Date
</Directory>

问题 - Web 浏览器需要花费大量时间显示目录中的文件,因此访问速度太慢。

如果有人能帮助实现这一要求我将不胜感激。

谢谢..

答案1

作为 @斯文指出,这无法通过您当前的设置实现。

目前,存在许多可能的瓶颈,但很可能是磁盘本身。

对于索引页的每个请求:

  • apache 需要查询磁盘以获取文件夹的内容
  • 然后 Apache 需要查询磁盘以获取每个条目的详细信息
  • 这会导致操作系统查找 UID/GID 等操作,以便尝试提供文本而不是数字值

根据您的实际需要,一种可能的解决方案是通过编程创建您自己的索引文件,并避免每次扫描整个目录。

类似于这个丑陋的和未经测试的“脚本”:

#!/bin/bash

DATE="$( date -I )"

echo "<html><head><title>File listing at $DATE <title></head>" > index.html
echo "<body><ul>" >> index.html
for x in `ls -1 FOLDER`; do
    echo "<li><a href=\"/path/to/$x\">$x<a></li>" >> index.html
done

echo "</ul></body></html" >> index.html

然后,用户可以从列表中选择一个文件(由 apache 和磁盘读取的一个文件),并根据需要访问该内容。

显然,您可能想要一些比这更好的东西,但希望尽可能减少每个请求的读取次数的总体思路是明确的。

相关内容