ubuntu – 如何解决PHP,MySQL和通用I / O的性能问题

前端之家收集整理的这篇文章主要介绍了ubuntu – 如何解决PHP,MySQL和通用I / O的性能问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个基于wordpress的网站在共享主机上运行.它的响应时间非常不错(检索 HTML页面大约需要2秒,加载所有资源需要5秒).

我计划将它移动到一个专用的虚拟服务器(Ubuntu 12.04 LTS),理论上它应该改进并使它们更加一致,因为它不共享.然而,我观察到严重的性能降级,页面需要10秒才能生成.

我通过编辑服务器上的/ etc / hosts并将域映射到127.0.0.1来排除网络问题.我使用Apache负载测试器ab来获取HTML,因此JS,CSS和图像都被排除在外.它还需要10秒钟.

我在服务器上安装了Zpanel,它也使用了MySQL,它的页面出现得非常快(1.5s),还有PHPMyAdmin.直接通过PHPMyAdmin对wordpress数据库执行一些查询也会非常快速地返回它们,查询时间在10到30毫秒的范围内.

内存也足够了,只有800Mb可用于1Gb物理内存,所以它似乎也不是交换问题.我还安装了APC以尝试提高PHP性能,但它没有任何效果.

我还应该寻找什么?什么可能导致性能下降?可能是某种I / O问题,因为我在基于云的虚拟服务器上运行?

我希望能够向我的提供者提出问题,但没有显示某些诊断的实际数据,我担心他只会责怪我的申请.

当我发出HTTP请求时,使用sar输出(每秒)更新:

02:31:29        cpu     %user     %nice   %system   %iowait    %steal     %idle
02:31:30        all      0.00      0.00      0.00      0.00      0.00    100.00
02:31:31        all      2.22      0.00      2.22      0.00      0.00     95.56
02:31:32        all     41.67      0.00      6.25      0.00      2.08     50.00
02:31:33        all     86.36      0.00     13.64      0.00      0.00      0.00
02:31:34        all     75.00      0.00     25.00      0.00      0.00      0.00
02:31:35        all     93.18      0.00      6.82      0.00      0.00      0.00
02:31:36        all     90.70      0.00      9.30      0.00      0.00      0.00
02:31:37        all     71.05      0.00      0.00      0.00      0.00     28.95
02:31:38        all     14.89      0.00     10.64      0.00      2.13     72.34
02:31:39        all      2.56      0.00      0.00      0.00      0.00     97.44
02:31:40        all      0.00      0.00      0.00      0.00      0.00    100.00
02:31:41        all      0.00      0.00      0.00      0.00      0.00    100.00

更新2在josten的建议之后.

I / O:

iotop因OSError失败:Netlink错误:没有这样的文件或目录(2)和sar -d也失败,文件/ var / log / sysstat / sa14中没有可用的请求活动.我认为这是因为这是一个虚拟机,就像iostat也失败了.这可能是因为sar 1 10报告的%iowait总是0%的原因吗?

cpu负载

在htop中获得cpu%的过程实际上是apache2.我期待这可能是数据库,但事实并非如此.当我执行新的HTTP请求时,它会持续几秒钟达到94%.似乎这是罪魁祸首.

我做了一个strace -f -t和一个汇总strace -c -f.似乎有很多lstat调用(57786),其中2455导致错误.不知道这是否正常.
除此之外,最顶层的调用是wait4,我认为这是正常的(它只是在等待)和munmap.前5名.

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 51.06    0.124742         897       139         6 wait4
 14.90    0.036388           1     57786      2455 lstat
  9.67    0.023622          13      1857           munmap
  7.69    0.018790          37       514           brk
  6.70    0.016361         481        34           clone
  2.87    0.006999          74        94        12 select

strace本身将apache的速度减慢了2倍.我现在试图了解长迹,看是否有任何迹象表明导致cpu飙升几秒钟的原因.

对于性能良好的服务器,lstat的典型时间是多少?我希望收集一些信息,这样如果存储访问错误,我可以以建设性的方式向提供者投诉.

更新fio随机读取测试的输出

random-read: (g=0): rw=randread,bs=4K-4K/4K-4K,ioengine=sync,iodepth=1
fio 1.59
Starting 1 process
random-read: Laying out IO file(s) (1 file(s) / 128MB)
Jobs: 1 (f=1): [r] [100.0% done] [12185K/0K /s] [2975 /0  iops] [eta 00m:00s]
random-read: (groupid=0,jobs=1): err= 0: pid=24264
  read : io=131072KB,bw=10298KB/s,iops=2574,runt= 12728msec
    clat (usec): min=119,max=162219,avg=380.34,stdev=957.37
     lat (usec): min=119,avg=380.89,stdev=957.40
    bw (KB/s) : min= 7200,max=13424,per=99.89%,avg=10285.72,stdev=1608.68
  cpu          : usr=2.80%,sys=18.65%,ctx=33511,majf=0,minf=23
  IO depths    : 1=100.0%,2=0.0%,4=0.0%,8=0.0%,16=0.0%,32=0.0%,>=64=0.0%
     submit    : 0=0.0%,4=100.0%,64=0.0%,>=64=0.0%
     complete  : 0=0.0%,>=64=0.0%
     issued r/w/d: total=32768/0/0,short=0/0/0
     lat (usec): 250=45.57%,500=37.17%,750=3.41%,1000=7.83%
     lat (msec): 2=5.67%,4=0.27%,10=0.08%,20=0.01%,250=0.01%

Run status group 0 (all jobs):
   READ: io=131072KB,aggrb=10297KB/s,minb=10545KB/s,maxb=10545KB/s,mint=12728msec,maxt=12728msec

我现在唯一的提示是,与其他系统相比,fio输出cpu线似乎显示出相当多的活动.我在我的本地Ubuntu机器上运行它,输出是:

cpu          : usr=0.19%,sys=0.59%,ctx=32923,minf=23

usr百分比似乎只是我服务器上报告的一小部分.

更新PHP APC.是的它已安装.
PHPinfo的输出

APC Support enabled
Version 3.1.7
APC Debugging   Disabled
MMAP Support    Enabled
MMAP File Mask  no value
Locking type    pthread mutex Locks
Serialization Support   PHP
Revision    $Revision: 307215 $
Build Date  May 2 2011 19:00:42

我应该检查一下具体的设置吗?这些是我的设置(本地值,主值):

apc.cache_by_default    On  On
apc.canonicalize    On  On
apc.coredump_unmap  Off Off
apc.enable_cli  Off Off
apc.enabled On  On
apc.file_md5    Off Off
apc.file_update_protection  2   2
apc.filters no value    no value
apc.gc_ttl  3600    3600
apc.include_once_override   Off Off
apc.lazy_classes    Off Off
apc.lazy_functions  Off Off
apc.max_file_size   1M  1M
apc.mmap_file_mask  no value    no value
apc.num_files_hint  1000    1000
apc.preload_path    no value    no value
apc.report_autofilter   Off Off
apc.rfc1867 Off Off
apc.rfc1867_freq    0   0
apc.rfc1867_name    APC_UPLOAD_PROGRESS APC_UPLOAD_PROGRESS
apc.rfc1867_prefix  upload_ upload_
apc.rfc1867_ttl 3600    3600
apc.serializer  default default
apc.shm_segments    1   1
apc.shm_size    32M 32M
apc.slam_defense    On  On
apc.stat    On  On
apc.stat_ctime  Off Off
apc.ttl 0   0
apc.use_request_time    On  On
apc.user_entries_hint   4096    4096
apc.user_ttl    0   0
apc.write_lock  On  On

更新将apc.shm_size增加到96M.缓存完整计数现在为0,并且在网站刷新几次后,缓存有96.5%的命中率. APC内存使用量为25.4MB免费.

它似乎已经将加载时间减少了3秒左右,如果我从服务器本身做一个纯粹的wget而没有得到任何图像等,现在减少了大约4到5秒.仍然比其他主机慢两倍但是肯定是一种提升.

我仍然觉得奇怪的是,为什么在服务器完全空闲时渲染这些页面花了这么长时间(我没有在我的开发PC上安装APC而且它没有那种行为).并且仍然奇怪的是那些额外的剩余秒数被浪费了.

这看起来像我在其他情况下看到Apache花费大量时间编译PHP的情况.您确定安装了操作码缓存(例如APC)吗?如果有帮助的话,它将在PHPinfo()的输出显示为已加载的模块.否则,为了跟踪Apache在mod_PHP中所做的事情,你最好的选择是XHProf.

除了通过谷歌到达这里的jbx以外的任何人:顺便说一下,其他答案都很棒.去读它们.但是那些答案,以及jbx对它们的回应,帮助我得出了这个结论.

猜你在找的Ubuntu相关文章