SEO 百科
内存
本页目录
内存
内存 是服务器的临时工作区,正在运行的程序、数据库查询和系统缓存都要占这块空间。做网站的人选内存,看的是这台机器上同时跑的东西要占多少、高峰时会不会被撑满。一旦撑满,系统会强行终止进程来保住自己,站点在这段时间返回 5xx,用户和爬虫都进不来。内存配多少,取决于网站跑的是什么、并发有多大。
内存里装着什么
程序运行时,代码和它处理的数据都要放进内存,处理器才能取用。网站请求进来,接收连接、拼装页面、连数据库,这些动作占的是内存,不是磁盘。并发一高,同时在场的数据就多,内存用量跟着往上走。
数据库尤其吃内存。它把常查的数据留在内存里,下次同一条查询就不用再读磁盘,这一部分通常叫缓存或缓冲池。缓存命中率越高,磁盘被读的次数越少,页面就出得越快。
系统自己也要占一块。Linux 会把空闲内存拿来缓存磁盘上的文件,这叫页缓存,读写同一份文件时能省一大截时间。这部分内存看着被占满,实际是留着的资源,需要时能让出来。
内存不足的后果
内存被用满,系统有两种反应。轻的是把一部分内存里的数据挪到磁盘上暂存,等用到时再搬回来,这就是交换。磁盘比内存慢好几个量级,一旦频繁交换,机器整体卡起来,响应时间被拖长。
重的是直接终止进程来腾地方,保证系统不崩。被终止的常常是占用大的那个,网站程序或数据库首当其冲。服务被杀掉之后要重启,重启这段时间站点返回 5xx,这段时间的访问和抓取都落空。
如果是程序本身有内存泄漏,加内存只是把爆掉的时间往后推。泄漏指程序用完内存不释放,占着不放,用得越久积得越多。这种要先修程序,再谈加配。
网站要配多少内存
配多少没有统一数,先看站里跑的堆栈。下面是几类常见站点,内存主要被谁占住、紧了先查哪儿:
| 站点跑什么 | 内存主要占用方 | 内存吃紧时先看 |
|---|---|---|
| 静态站、有缓存 | 网络服务器、系统缓存 | 有没有多余服务白占着 |
| PHP 动态内容站 | PHP 工作进程、数据库 | 进程数和每进程占用 |
| 跑 Java 的站 | 虚拟机堆 | 堆上限设成了多少 |
| 用 Redis 做缓存 | 缓存数据本身 | 缓存有没有设大小上限 |
判断的依据是监控里的内存和交换曲线,不是套一个现成数字。内存长期用不满、交换几乎为零,说明这一档够用;反复顶到高位、开始出现交换,才需要往上调。先跑起来看用量,再决定加不加,比一次买到顶配省。
内存和缓存的关系
给内存加钱,收益多半落在缓存上。内存越大,数据库能留在内存的热数据越多,系统能缓存的文件越多,从磁盘取数据的次数就越少。这条链走通了,同样的 CPU、同样的盘,响应也能快一截。
但缓存不是不设限越好。像 Redis 这类内存缓存,要给它配一个大小上限和淘汰策略,否则数据一路涨,把程序和数据库的内存挤掉,反而逼出交换。留够系统和其它程序的空间,缓存才只在帮忙的范围内占。
与抓取和收录的关系
内存撑满,最直接的是站点返回 5xx,而 5xx 会压低抓取。Google 写明,5xx 和 429 会让抓取工具暂时放慢,“已编入索引的网址仍会保留在索引中,但最终会被丢弃”[1]。被杀掉的进程重启得慢,这段空窗里的网址就可能真被丢出索引。
抓取还看机器持不持续可达。Bing 提醒,如果“我们无法持续抓取你的网站,就可能不再收录它”[2]。百度把一次收录拆成从抓取到展现三步,头一步就是抓取网页[3]。内存配得稳、不频繁爆,抓取这一路才不会被反复打断。
常见误用
一个误用是逢慢就加内存。慢在程序低效或数据库没建索引时,内存再大也不解决,请求该等还得等。
另一个误用是把系统缓存当成不够用。Linux 报的内存占用里有一块是页缓存,看着满,其实是留着的余量,不能直接当负载告警。
还有一个误用是加了内存就不管泄漏。程序只占不还,再大的内存也会被一点点吃空,迟早还是回到 5xx。
附录
参见
参考资料
官方(境外)
- 《HTTP 状态代码对 Google 抓取工具的影响》,Google 搜索中心。
- 《Why is my site not in the index?》,Bing 网站站长文档。
官方(国内)
- 《百度搜索的工作原理》,百度搜索资源平台,2023-12-21 更新。
第三方
无。
外部链接
无。