jjzjj

php - Apache 非常高的页面加载时间

coder 2023-10-19 原文

我的 Drupal 6 站点多年来一直运行平稳,但最近出现了间歇性的极度缓慢(10-60 秒页面加载)。几个小时的缓慢,然后是数小时的正常(4-6 秒)页面加载。页面总是加载无误,只是有时会花很长时间。

我的设置:

  • window 服务器 2003
  • Apache/2.2.15 (Win32) Jrun/4.0
  • PHP 5
  • MySql 5.1
  • Drupal 6
  • 冷融合 9
  • VMware 虚拟环境
  • 企业防火墙后面的 DMZ
  • 流量:1-3 次点击/秒峰值

疑难解答

  • apache 错误日志中没有适用的错误
  • drupal 事件日志中没有错误
  • Drupal 开发模块在 366.23 毫秒内显示 242 个查询,页面执行时间为 2069.62 毫秒。 (所以看起来查询和 php 脚本不是问题)
  • 没有异常高的 CPU、内存或磁盘 IO
  • Cold fusion 应用程序和 drupal 之外的其他静态页面也加载缓慢
  • webpagetest.org 测试显示第一个字节的时间非常长

问题似乎与 Apache 响应请求有关,但以前我只在 100% CPU 负载下看到过这种行为。仅通过资源监控来判断,似乎几乎没有什么进展。

关键是——大约一半的网站访问来 self 们的 LAN,但如果我禁用防火墙规则并阻止来 self 们网络外部的访问,内部 (LAN) 访问(1000 多台设备)会很快。但是一旦恢复外部访问,站点就会瘫痪。

Apache 配置?爬虫/机器人?攻击者?我已无计可施,我应该去哪里寻找问题所在?

------编辑:------

附件是来自 webpagetest.org 的瀑布图,显示了 15 秒的加载时间。我见过长达几分钟的时间。而且,服务器大部分时间都运行良好。绿色区域表示浏览器已发送请求并正在等待接收从服务器返回的第一个字节数据。这当然是后端延迟,但令人费解的是,在此缓慢期间几乎没有使用 CPU。

(没有足够的代表发布图片,请参阅 https://webmasters.stackexchange.com/questions/54658/apache-very-high-page-load-time

------编辑------

在 Apache 方面 - 这可能是 ThreadsPerChild 问题吗?

最佳答案

经过大量研究,我可能找到了解决方案。如果我是正确的,那是 apache 配置问题。具体来说,“ThreadsPerChild”指令。见... http://httpd.apache.org/docs/2.2/platform/windows.html

Because Apache for Windows is multithreaded, it does not use a separate process for each request, as Apache can on Unix. Instead there are usually only two Apache processes running: a parent process, and a child which handles the requests. Within the child process each request is handled by a separate thread.

ThreadsPerChild: This directive is new. It tells the server how many threads it should use. This is the maximum number of connections the server can handle at once, so be sure to set this number high enough for your site if you get a lot of hits. The recommended default is ThreadsPerChild 150, but this must be adjusted to reflect the greatest anticipated number of simultaneous connections to accept.

原来,这个指令根本没有在我的配置中设置,因此默认为 64。我通过查看任务管理器中第二个 httpd.exe 进程的线程数来确认这一点。当服务器达到超过 64 个连接时,多余的请求只需等待线程打开即可。我在 httpd.conf 中添加了 ThreadsPerChild 150。

此外,我启用了 apache 状态模块 http://httpd.apache.org/docs/2.2/mod/mod_status.html

...除其他外,它允许人们在任何给定时刻查看服务器上事件请求的总数。马上,我可以看到多达 80 个事件请求的峰值。时间会证明一切,但我相信这会解决我的问题。到目前为止,30 小时没有打嗝。

关于php - Apache 非常高的页面加载时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19696359/

有关php - Apache 非常高的页面加载时间的更多相关文章

  1. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  4. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

  5. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  6. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  7. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  8. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  9. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  10. ruby-on-rails - 使用 HTTParty 的非常基本的 Rails 4.1 API 调用 - 2

    Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"

随机推荐