V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jingyulong
V2EX  ›  程序员

今天有空,请教各位 V 友,怎么优化 LAMP 的网站速度?

  •  
  •   jingyulong · 2018-11-11 15:41:54 +08:00 · 6643 次点击
    这是一个创建于 1964 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我用的

    • Vultr 的 VPS,512M 内存的
    • Cloudflare 的 CDN
    • HTTPS 用的 Let's Encrypt

    站点打开速度最快是 1s 多,Google 了很多,但是没有头绪。可以给一个思路吗?本人也是才接触这些不久。是因为内存小引起的吗?

    点击:博客

    帮忙看看,感激不尽。博客内容轻喷。。。

    85 条回复    2018-11-13 15:31:27 +08:00
    likuku
        1
    likuku  
       2018-11-11 16:17:54 +08:00   ❤️ 1
    Chrome 访问你的博客,接着 Chrome 的菜单 -》视图 -》开发者 -》开发者工具 -》 Network

    刷新一次页面,根据页面加载各种内容的耗时对症下药。
    likuku
        2
    likuku  
       2018-11-11 16:18:43 +08:00   ❤️ 1
    补刀:这么曲线救国推广自己博客就太那啥了,要推广就大大方方广而告之,不丢人好吗。
    hefish
        3
    hefish  
       2018-11-11 17:25:21 +08:00
    打开确实不快,但 wordpress 本来就不算快。可以看一下数据库的延时还是 php 的。
    dowson8684
        4
    dowson8684  
       2018-11-11 17:45:35 +08:00
    时间全花在背景图的加载了。
    lostberryzz
        5
    lostberryzz  
       2018-11-11 17:52:07 +08:00
    Vultr 是哪个 Location 的?如果套 CF 优先 LA,次选 NJ
    jingyulong
        6
    jingyulong  
    OP
       2018-11-11 17:52:14 +08:00
    @likuku 加载的内容除外,就一个几十 k 的页面,响应很慢。我做网站开发也有几年了,这些基本的优化我知道的。我的重点是为什么主页面的延时会比较高,不知道是网络的问题,还是 VPS 硬件的问题?
    jingyulong
        7
    jingyulong  
    OP
       2018-11-11 17:52:34 +08:00
    @likuku PS:其实我这个博客又没有什么内容,即使推广了也没人看的。目前我只想锻炼自己写文章的能力,给自己看的。内容才是王道,等哪天自己文章写好了,也不用推广吧?
    lsido
        8
    lsido  
       2018-11-11 17:54:09 +08:00 via Android
    这还用问吗?你换本地看看咯
    lsido
        9
    lsido  
       2018-11-11 17:54:20 +08:00 via Android
    快的你怀疑人生
    opengps
        10
    opengps  
       2018-11-11 17:55:13 +08:00
    1 楼方法足够你排查大部分问题
    liuxu
        11
    liuxu  
       2018-11-11 17:55:48 +08:00
    主资源 TTFB 2.6s 。。。你慢在服务器延迟上,服务器切成搬瓦工 gia,CN2 香港,软银日本,台湾都行,保证快了
    jingyulong
        12
    jingyulong  
    OP
       2018-11-11 17:56:43 +08:00
    @hefish 可以用什么工具或者技术测数据库的延时吗?我 ping 我的 ip 倒是蛮快的。我看书上说,可以给 PHP 加缓存,有什么好的建议嘛^_^
    jingyulong
        13
    jingyulong  
    OP
       2018-11-11 17:58:30 +08:00
    @dowson8684 背景图大概 100 多 k,目前这不是主要原因,我想找找主页面为什么延迟那么高的原因
    jingyulong
        14
    jingyulong  
    OP
       2018-11-11 17:59:44 +08:00
    @lsido 主页面不大,本地肯定很快
    jingyulong
        15
    jingyulong  
    OP
       2018-11-11 18:00:40 +08:00
    @opengps 服务器的延迟为什么那么高?加载资源的时间都能看的到的
    vishva
        16
    vishva  
       2018-11-11 18:00:50 +08:00
    推荐 <<http/2 基础教程>>
    opengps
        17
    opengps  
       2018-11-11 18:03:25 +08:00
    静态资源似乎占用时间做多,套一层 cdn 吧,CF 还不错
    jingyulong
        18
    jingyulong  
    OP
       2018-11-11 18:04:42 +08:00
    @liuxu 我的 VPS 是北美迈阿密的节点,我用我的 AWS 访问也很慢。。。。。Vultr 充钱进去了,本来搭梯子的,后面想着放个网站在上面,等钱用完了就换一个稳定点的,我看好多人用 Digital Ocean,等到时候试试。。。搬瓦工的好用吗?
    niubee1
        19
    niubee1  
       2018-11-11 18:05:12 +08:00
    缓存, 缓存, 还是缓存.
    jingyulong
        20
    jingyulong  
    OP
       2018-11-11 18:05:23 +08:00
    @vishva 好的,先谢啦,我这就去看看
    liuxu
        21
    liuxu  
       2018-11-11 18:13:10 +08:00
    @jingyulong

    想好好开站,最低标准也得是搬瓦工 gia 的线路,我建议你把博客源站迁移到国内,再套个腾讯阿里的 CDN

    想看速度可以看我个人资料,我的博客就是这么做的,楼上说的资源大小,http2 都不是重点,重点还是主资源 TTFB 太大
    likuku
        22
    likuku  
       2018-11-11 18:20:57 +08:00   ❤️ 2
    @jingyulong 远程看不出,就换服务器上本地测,排除远程网络传输因素,time curl 都可以测,

    wordpress 可以在底部显示页面执行时间么(类似 V2EX 页面底部有执行时长显示的; wp 用的极少,不清楚)?
    执行时间能查到的话,假若 php 执行很慢,你得确认你 php 版本?尽可能上 php7,另外 php 的 APC 缓存加速开了么?

    php7 和 apc 缓存 是否开,都直接影响页面执行性能若干倍。

    页面和 php 能作的都作了,还是慢,那就得查 db 了。

    MySQL 慢查询日志记录开了没?慢查询多不多? mysql 版本?数据表存储引擎类型? InnoDB 么? Innodb mem pool size 够不够大?

    phpmyadmin 查查 db 的最近执行性能统计信息。

    进系统再查 内存是不是不够,swap 是否频繁读写?

    vultr 后台再查查 测试期间 /慢的时候,系统性能 /网络是不是被吃满了?排除资源不够的问题。

    以上,都是最基本的常规排查方式 /流程,算常识了。

    [我做网站开发也有几年了,这些基本的优化我知道的] 好了啦,我们知道你很资深了~
    likuku
        23
    likuku  
       2018-11-11 18:24:39 +08:00   ❤️ 1
    年初也用 这家 512M vps 以 LNMP 跑过 wp,并没有觉得慢过。

    [HTTPS 用的 Let's Encrypt],可能是个影响因素,海外的站点,有时加了 https 就根本没法打开,只开 http 反而蛮正常,建议试试吧。
    luminous
        24
    luminous  
       2018-11-11 19:00:20 +08:00 via Android   ❤️ 1
    你都用上 Cloudflare 那能快吗
    jingyulong
        25
    jingyulong  
    OP
       2018-11-11 21:00:03 +08:00
    @opengps 用什么 cdn 比较好呢
    jingyulong
        26
    jingyulong  
    OP
       2018-11-11 21:05:16 +08:00
    @liuxu 不过迁到国内的话,还要备案,太麻烦了。还是想用国外的服务器,我看有一些博客优化的很好了。还是你理解我想要问的问题了🤝一会去膜拜下你的站点☺️
    jingyulong
        27
    jingyulong  
    OP
       2018-11-11 21:08:39 +08:00
    @likuku 谢谢大神的指点,非常全面了,对我很有帮助,谢谢啦。我一直做.net 开发,除了通用的性能优化,LAMP 的的的确知之甚少,请见谅,还需要多多学习。
    jingyulong
        28
    jingyulong  
    OP
       2018-11-11 21:09:44 +08:00
    @likuku https 有可能是这个问题,我再确认一下
    jingyulong
        29
    jingyulong  
    OP
       2018-11-11 21:10:27 +08:00
    @niubee1 谢谢,我找下相关资料学习下
    jingyulong
        30
    jingyulong  
    OP
       2018-11-11 21:11:29 +08:00
    @luminous 没用 Cloudflare 之前更慢,我再排查下,如果有什么进展告诉你们
    SukkaW
        31
    SukkaW  
       2018-11-11 21:41:11 +08:00   ❤️ 1
    简单看了一下,主要问题就是:
    - 页面 TTFB 过高
    - 没有做动静分离
    - 静态文件未对国内优化
    liuxu
        32
    liuxu  
       2018-11-11 22:33:49 +08:00
    @jingyulong

    我的博客被刷 CDN 流量了,现在切到台湾了,你可以看看速度,不需要备案
    jingyulong
        33
    jingyulong  
    OP
       2018-11-11 22:43:21 +08:00
    @SukkaW 明白啦,谢谢你的建议
    jingyulong
        34
    jingyulong  
    OP
       2018-11-11 22:43:45 +08:00
    @liuxu 你站点的速度好快
    jingyulong
        35
    jingyulong  
    OP
       2018-11-11 22:47:22 +08:00
    @lostberryzz 是 Miami 的,改天试试 LA
    mytsing520
        36
    mytsing520  
       2018-11-11 22:49:34 +08:00
    内存扩到 2G,使 Nginx 能够尽情释放,处理上能快很多
    lostberryzz
        37
    lostberryzz  
       2018-11-11 22:53:53 +08:00
    我 Vultr Location 是 NJ 的,套上 CF TFFB 在 550ms 左右,你可以试下
    h19981126g
        38
    h19981126g  
       2018-11-11 23:05:47 +08:00
    前端文件全部走国内 CDN,套 cf,再或者买个香港服务器,用香港的做转发,会快 50%左右
    jingyulong
        39
    jingyulong  
    OP
       2018-11-11 23:08:06 +08:00
    @mytsing520 我的是 Apache,2G 内存估计会快很多,现在的 mysql 512M 的内存还是有很大限制的
    jingyulong
        40
    jingyulong  
    OP
       2018-11-11 23:09:27 +08:00
    @lostberryzz 好的,我试试,你的 VPS 什么配置?
    jingyulong
        41
    jingyulong  
    OP
       2018-11-11 23:10:14 +08:00
    @h19981126g 国外服务器哪家服务商比较好一点呀
    SukkaW
        42
    SukkaW  
       2018-11-11 23:35:33 +08:00 via Android   ❤️ 4
    @jingyulong
    先别着急换服务器。我给几条优化建议吧。

    使用 LNMP + PHP7,不要使用 LAMP
    Gravatar 换成国内镜像
    CDNJS 换成国内镜像
    静态资源与主站分离

    这些具体措施往 Google 里丢 能出来一大批教程
    lostberryzz
        43
    lostberryzz  
       2018-11-12 00:11:19 +08:00 via iPhone
    @jingyulong TFFB 基本与性能无关,按你的需求选就好
    lostberryzz
        44
    lostberryzz  
       2018-11-12 00:12:51 +08:00 via iPhone
    当然这是你程序不是特慢的情况下,如果是未优化的 WordPress,那可能性能占的权重大一些。
    dnsaq
        45
    dnsaq  
       2018-11-12 00:19:00 +08:00 via iPhone
    这还用看?数据库查询请求缓存,直接 redis 吧,说什么静态资源 动静分离的都是扯几把犊子的
    liyuanzao
        46
    liyuanzao  
       2018-11-12 02:53:07 +08:00
    先不用上动静分离。。。

    先直接找个 WP CACHE 的插件。。。

    效果应该立竿见影。。。

    VULTR+WORDPRESS+CLOUDFLARE 我也用,速度可以很快
    bjfane
        47
    bjfane  
       2018-11-12 06:48:32 +08:00 via iPhone
    bwh8 适合你
    zhaoyan1245
        48
    zhaoyan1245  
       2018-11-12 07:05:35 +08:00
    vultr 个人还是推荐东京节点,其他节点速度实在太慢,还有最好给 VPS 装个 BBR,这样可以最大利用 VPS 的网速
    cs8425
        49
    cs8425  
       2018-11-12 08:02:56 +08:00   ❤️ 2
    主要问题还是 TTFB...1.7s...
    你分别多放个静态页面、纯 php 页面(不连资料库)
    如果静态页面的 TTFB 没改善, 往 web server 查
    纯 php 页面没改善, 往 php 设定 /优化
    两者都有改善, 往你的 db 查
    imnpc
        50
    imnpc  
       2018-11-12 08:45:48 +08:00
    jetpack 插件卸载掉 国内没办法使用 WP 已被 X
    no1xsyzy
        51
    no1xsyzy  
       2018-11-12 11:11:27 +08:00
    @likuku #23 海外 https 的话,8 月开始的 SNI 检测应该不会表现在等待时间内,怎么说也是 TLS 建立阶段,甚至是两个请求……
    laoame
        52
    laoame  
       2018-11-12 13:37:14 +08:00
    还是节点的问题,跟踪一下路由跃点,你就会发现!

    或者你可以在你的 web 放一个 txt 文件,一样慢。

    tracert jingyulong.net

    然后你在看看

    tracert www.v2ex.com
    kn007
        53
    kn007  
       2018-11-12 13:41:34 +08:00   ❤️ 1
    换 lnmp,另外 CF 国内速度波动比较大。

    尽量选线路好的机子,即便海外也能很快。

    博客: https://kn007.net/

    美国,没有使用 cdn,速度还行。
    likuku
        54
    likuku  
       2018-11-12 13:57:55 +08:00
    @no1xsyzy #51 我是在年初 1 月时发觉这样子的,更觉得猜测是针对没备案的域名作的限制(没备案+非明文的 web 数据流,那就被砍了吧)。
    lvwzhen
        55
    lvwzhen  
       2018-11-12 14:41:21 +08:00
    Wordpress 的话可以安装 Memcached 解决缓存的问题,速度能有很大的优化
    zcxj138
        56
    zcxj138  
       2018-11-12 17:30:20 +08:00
    同一个链接刷新,最长 23s,最短 2.3s ,这已经不是 apache 或者 nginx 的问题了。
    jingyulong
        57
    jingyulong  
    OP
       2018-11-12 18:06:32 +08:00
    @SukkaW 谢谢你啦,晚上我按照大家的建议试试,先做优化。
    jingyulong
        58
    jingyulong  
    OP
       2018-11-12 18:07:11 +08:00
    @lostberryzz 明白啦,谢谢
    jingyulong
        59
    jingyulong  
    OP
       2018-11-12 18:08:57 +08:00
    @dnsaq 有可能数据库的缓存不够,mysql 配置的参数一会我贴出来
    jingyulong
        60
    jingyulong  
    OP
       2018-11-12 18:10:03 +08:00
    @liyuanzao 晚上我试试这个插件,谢谢啦
    jingyulong
        61
    jingyulong  
    OP
       2018-11-12 18:11:20 +08:00
    @bjfane 我先试试优化,实在不行再换服务器
    jingyulong
        62
    jingyulong  
    OP
       2018-11-12 18:11:49 +08:00
    @zhaoyan1245 BBR 搭梯子的时候已经开启啦
    jingyulong
        63
    jingyulong  
    OP
       2018-11-12 18:12:32 +08:00
    @cs8425 好的👌
    jingyulong
        64
    jingyulong  
    OP
       2018-11-12 18:13:16 +08:00
    @imnpc jetpack 我用来使用 markdown 编辑器
    jsjscool
        66
    jsjscool  
       2018-11-12 18:36:16 +08:00
    VgV
        67
    VgV  
       2018-11-12 19:10:58 +08:00
    第一次打开很慢,5 秒左右。第二次打开稍微快了一些,2 秒,也许是建立通信与解密占了时间吧,毕竟你才 512M........
    h19981126g
        68
    h19981126g  
       2018-11-12 20:14:56 +08:00
    国外比较推荐 bwh 的 cn2 路线,但说句实际的,最好的还是阿里云香港,既不用备案,相应速度也好很多,建议你多关注下他们的活动,像之前的 700 三年阿里云香港 2h4g 用来做站其实很值,但被很多人喷的一文不值。。
    jingyulong
        69
    jingyulong  
    OP
       2018-11-12 22:48:15 +08:00
    @no1xsyzy https 有什么好的解决方案吗?
    yytsjq
        70
    yytsjq  
       2018-11-12 22:57:28 +08:00
    使用 Redis 缓存 HTML 页面

    Redis Page Cache
    https://wordpress.org/plugins/pj-page-cache-red/
    ioutio
        71
    ioutio  
       2018-11-12 22:57:54 +08:00
    wordpress 代码中可能有调用到某些缓慢的链接导致的,我之前遇到过谷歌字体无法加载,然后打开特别慢,通过浏览器也监测不到
    jingyulong
        72
    jingyulong  
    OP
       2018-11-12 23:19:30 +08:00
    @laoame traceroute https://jingyulong.net
    traceroute: unknown host https://jingyulong.net
    我的基本上都没反应
    jingyulong
        73
    jingyulong  
    OP
       2018-11-12 23:27:37 +08:00
    @kn007 你的网站我用我的浏览器 Disable Cache 访问,页面的 TTFB 最快 500ms 左右。多刷新几次,有时候可以用时 5s 多,不是太稳定。。。。。你用的哪家的服务器呀
    jingyulong
        74
    jingyulong  
    OP
       2018-11-12 23:28:29 +08:00
    @yytsjq 兄弟,谢啦
    jingyulong
        75
    jingyulong  
    OP
       2018-11-12 23:29:36 +08:00
    @ioutio 周末准备把这些静态资源分析下
    jingyulong
        76
    jingyulong  
    OP
       2018-11-12 23:37:49 +08:00
    大家的每一条的留言我都会一一回复的,因为回复时间间隔有限制,所以只能一次几个的回复。另外,我放了一个 test.txt 在站点上,大家可以访问这个:[点击访问]( https://jingyulong.net/test.txt),排除静态资源造成的影响。
    jingyulong
        77
    jingyulong  
    OP
       2018-11-12 23:39:12 +08:00
    jingyulong
        78
    jingyulong  
    OP
       2018-11-12 23:45:53 +08:00
    @yytsjq 插件 Redis Page Cache,听你的建议已经安装🙏🏻
    g5
        79
    g5  
       2018-11-13 00:17:39 +08:00 via Android
    真的很慢,上香港鸡
    liyuanzao
        80
    liyuanzao  
       2018-11-13 00:23:22 +08:00
    @jingyulong 估计你得 HTTP 配置有问题,第一次访问特别慢。。。后面稍微快一点,说明 HTTP 线程第一次可能没给够。。。
    eamon666
        81
    eamon666  
       2018-11-13 00:33:25 +08:00
    就是你的首页内容慢了。
    可能会涉及到服务端的问题,自己本地测一下试试
    和静态资源没关系。
    qianmeng
        82
    qianmeng  
       2018-11-13 06:45:31 +08:00 via Android
    我给你说一下我的设置,centos 加上宝塔面板,设置 nginx 和 php7
    php 用 memcached 和 opcache
    网络配置换 google 的 bbr,你搜一下就知道了,关键点在这里。
    vps 配置和你一样,laravel 你知道多慢的,从 5-15 秒降低到 1 秒以内,而且很抗压,
    no1xsyzy
        83
    no1xsyzy  
       2018-11-13 14:30:44 +08:00
    @jingyulong 我是否定 HTTPS 问题…… [请求发出后] 卡 2s 怎么说也不是 HTTPS 问题。
    静态资源是用 Apache 提供的吗?
    ssh 进服务器 curl 自己看一下延迟(注意远端计算延迟)
    话说 ssh 有很明显的延迟吗?没有的话可以考虑换 nginx,估计是 512MB 卡到 Apache 了。
    no1xsyzy
        84
    no1xsyzy  
       2018-11-13 14:39:25 +08:00
    @likuku 那时候可能是这样,8 月开始详情 steamcn 找 302v8 讨论,我也不知道能不能谈这种事。
    主要就是因为同 IP 不同网站(比如 CDN 什么的),但又不好弄一个跨极多域名的证书,所以就用 SNI 按照客户端请求给证书,所以中间人是可以断一次连接来求出域名的。但因为无法提供证书所以浏览器会报错。
    dif
        85
    dif  
       2018-11-13 15:31:27 +08:00
    CloudFlare Pro + Vultr JP + Redis + WP-ROCKET + opcache 感觉速度还不错。其实你多买 5 条 Page rule 也是能起到一定的加速作用。另外我还开启了 Mip 和 AMP。百度收录起来比我在阿里云的站点快多了。不只是因为 CF 的原因还是 MIP 的原因。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3799 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:35 · PVG 18:35 · LAX 03:35 · JFK 06:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.