什么是 RSS

什么是 RSS? 

 

RSS是一种网页内容联合格式(web content sydication format)。 它的名字是 Really Simple Syndication 的缩写。 RSSXML的一种。所有的RSS文档都遵循XML 1.0规范,该规范发布在W3C网站上。 

在一个RSS文档的开头是一个<rss>节点和一个规定的属性version,该属性规定了该文档将以RSS的哪个版本表示。如果该文档以这个规范来表示,那么它的version属性就必须等于2.0。 

在<rss>节点的下一级是一个独立的<channel>节点,该节点包含关于channel的信息和内容。 

 

关于本文档

该文档是在 2002 年秋天撰写的,当时的 RSS 版本为 2.0.1。 它包含从 RSS 0.91 规范(2000年)开始的所有的修改和添加,以及包含在RSS 0.92(2000年12月)和RSS 0.94(2002年8月)中的新的特性。 

 

必需的频道节点

下面有一份必须包含的频道(channel)节点的列表,每一个都有一个简单的描述、一个例子、应该出现的位置和更详细描述的超链接。

 

元素                  描述
title 频道(channel)名称。它可以告诉别人如何访问你的服务。
link 响应该频道的网站的URL 
description 关于该频道的描述 

 

可选的频道元素

元素                  描述              范例  
language 使用的语言。这允许聚合器对所有的意大利语站点分组。
copyright 版权声明
managingEditor 内容负责人的Email
webMaster 技术人员的Email
pubDate 内容的发布时间: Sat, 07 Sep 2002 00:00:01 GMT 
lastBuildDate 最后更新时间: Sat, 07 Sep 2002 09:42:31 GMT 
category 指定该频道所属的一个或多个分类。遵循与item级category元素相同的规则。
generator 生成该频道的程序名称
docs 指向rss格式文档的url地址? http://blogs.law.harvard.edu/tech/rss 
cloud 允许所有进程注册一个cloud用于获得频道的更新通知,并为rss种子实现一个轻量级的发布订阅协议。 
<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/> 
ttl ttl是Time to live的缩写。它指示cache的有效保存时间。 <ttl>60</ttl> 
image 与频道一起显示的图片地址 
rating 该频道的统计图片地址 
textInput 指定一个textbox与该频道一起显示 
skipHours 告诉使用者哪些时段是可以忽略的 
skipDays 告诉使用着哪些天是可以忽略的 

 

<channel>子节点<image> 
<image>是一个可选的<channel>子节点,该节点包含三个必需的子元素和三个可选的子元素。 
<url>是GIF、JPEG或PNG图像文件的URL地址,该图像代表整个频道 
<title>用于描述上面的图像,等同于HTML语言中的<img>的alt属性 
<link>是要连接的站点的url,当显示频道时,图像的连接指向该站点。 
<title>和<link>应该与频道的<title>和<link>有相同的值 
可选的节点包括<width>和<height>,它们是数字类型,指定图像的宽度和高度,单位为像素
<description>就是link的TITLE属性中文本,它将在调用网页时显示出来。

图像宽度的最大值为144,默认值为88
图像高度的最大值为400,默认值为31

 

<channel>子节点<cloud> 
<cloud>是一个可选的<channel>子节点。 
它指定一个可以支持rssCloud接口的web服务,rssCloud接口可以用HTTP-POST,XML-RPC或SOAP1.1实现。 
它的目的是允许通知注册为cloud的进程频道被更新,从而实现一个轻量级的发布订阅协议。 
<cloud domain="rpc.sys.com" port="80" path="/RPC2" 
registerProcedure= "myCloud.rssPleaseNotify" protocol="xml-rpc" />
在这个例子中,为了请求频道通知,你需要发送一个XML-RPC消息到rpc.sys.com的80端口,路径为/RPC2。调用的过程为myCloud.rssPleaseNotify。

 

<channel>子节点<ttl> 
<ttl>是一个可选的<channel>子节点。 
ttl是time to live的缩写。它表示频道在被刷新前应该被缓存的时间。这使得rss源可以被一个支持文件共享的网络所管理,例如Gnutella 
例如:<ttl>60</ttl> 

<channel>子节点<textInput> 
<textInput>是<channel>的可选的子节点,<textInput>包含四个子节点。 
<title>--提交按钮的标签 
<description>--该文本输入区的描述 
<name>--文本输入区的名称 
<link>--处理文本输入的CGI脚本的URL 
使用<textInput>的目的有些神秘(?)。你可以用它提供一个搜索引擎输入框,或让读者提供反馈信息。许多聚合器忽略该节点。 

 

<item>的节点 
一个频道可以包含许多项目(item)节点。一个项目可以代表一个故事——比如说一份报纸或杂志上的故事,如果是这样的话,那么项目的描述则是故事的概要,项目的链接则指向整个故事的存放位置。项目的所有节点都是可选的,但是至少要包含至少一个标题(title)和描述(description)。 

 

元素                  描述              范例 
title item的标题
link item的URL
description item概要
author 作者的email地址
category item可以包含在一个或多个分类中
comments 与item相关的评论的地址
enclosure 附加的媒体对象
guid 可以唯一确定item的字符串 
pubDate item发布的时间: Sun, 19 May 2002 15:21:36 GMT 
source rss频道来源: Quotes of the Day

<item>子节点

<source> 
<source>是<item>的可选节点。 
它的值是item来自的rss频道的名称,从item的title衍生而来。它有一个必须包含的属性url, 该属性链接到XML序列化源。 
<source url="http://static.userland.com/tomalak/links2.xml">Tomalak's Realm</source> 该节点的作用是提高连接的声望,进一步推广新闻项目的源头。它可以用在聚合器的Post命令中。当从聚合器通过webblog访问一个item时,<source>能够自动被生成。 

<enclosure> 
<enclosure>是<item>的可选节点。 
它有三个必要的属性。url属性指示enclosure的位置,length指出它的字节大小,type属性指出它的标准MIME类型 
url必须为一个http url。 
<enclosure url="http://www.scripting.com/mp3s/Suite.mp3" length="12216320" type="audio/mpeg" /> 
<item>子节点<category> 
<category>是<item>的可选节点。 
它有一个可选属性或域,该属性是一个用来定义分类法的字符串。 
该节点的值是一个正斜杠分割的字符串,它用来在指定的分类法中识别一个分级位置(hierarchic location)。处理器可以为分类的识别建立会话。(Processors may establish conventions for the interpretation of categories)下面有两个例子: 
<category>Grateful Dead</category> 
<category domain="http://www.fool.com/cusips">MSFT</category> 你可以根据你的需要为不同的域(domain)包含很多category节点,并且可以在相同域的不同部分拥有一个前后参照的item。 

<pubDate> 
<pubDate>是<item>的可选节点。 
它的值是item发布的日期。如果它是一个没有到达的日期,聚合器在日期到达之前可以选择不显示该item。 
<pubDate>Sun, 19 May 2002 15:21:36 GMT</pubDate> 

<guid> 
<guid>是<item>的可选节点。 
guid是globally unique identifier的缩写。它是一个可以唯一识别item的字符串。当item发布之后,聚合器可以选择使用该字符串判断该item是否是新的。 
<guid>http://some.server.com/weblogItem3207</guid> 
guid没有特定的语法规则,聚合器必须将他们看作一个字符串。生成具有唯一性的字符串guid取决于种子的源头。 
如果guid节点有isPermaLink属性,并且值为真,读取器就会认为它是item的permalink。permalink是一个可在web浏览器中打开的url链接,它指向<item>节点所描述的全部item。 
<guid isPermaLink="true">http://inessential.com/2002/09/01.php#a2</guid> 
isPermaLink是可选属性,默认值为真。如果值为假,guid将不会被认为是一个url或指向任何对象的url。 

<comment> 
<comment>是<item>的可选节点。 
如果出现,它指向该item评论的url 

<author> 
<author>是<item>的可选节点。 
它是item的作者的email。对于通过rss传播的报纸和杂志,作者可能是写该item所描述的文章的人。对于聚集型webblogs,作者可能不是责任编辑或站长。对于个人维护的webblog,忽略<author>节点是有意义的。 
<author>lawyer@boyer.net (Lawyer Boyer)</author>

<think>好的,用户现在问的是“什么是RSS内存?”,我需要详细解释这个概念。首先,我需要确定用户可能的背景,可能是在使用Linux系统进行开发或者运维,遇到了内存相关的问题,比如在之前的讨论中提到了hv::Buffer::enablePool的内存优化,其中提到了RSS内存的降低。因此,用户可能在性能优化过程中接触到RSS,需要进一步了解其含义和作用。 接下来,我需要回忆RSS的定义。RSS全称是Resident Set Size,即常驻内存集。它是进程实际占用物理内存的大小,包括使用的堆、栈和共享库中的内存部分。但要注意,RSS并不包括已经被换出到交换区的内存,也不包括尚未被使用的内存页。 然后,我需要对比其他内存指标,比如VSZ(虚拟内存大小),以便用户清楚区别。VSZ是进程可访问的虚拟内存总量,可能比RSS大很多,因为它包括未实际使用的内存和共享库的部分。同时,还可以提到/proc文件系统中的其他指标,比如PSS(Proportional Set Size)和USS(Unique Set Size),这些在分析内存时也很重要。 用户可能想知道RSS的实际应用场景,比如如何通过工具(如top、ps、htop、smem)查看RSS,以及如何解读这些数据。需要举例说明,比如在之前的例子中启用内存池后RSS从1.1G降到800M,说明内存使用效率提升。 此外,用户可能关心RSS的限制和潜在问题。比如RSS是否包含共享内存,可能高估实际使用的物理内存,特别是在多个进程共享库的情况下。这时候可以引入PSS的概念,解释其如何更准确地计算共享内存的部分。 还要考虑用户可能的误区,比如认为RSS高就一定不好,但实际上这取决于应用的具体情况。如果进程确实需要大量内存,高RSS是正常的。但如果RSS异常增长,可能存在内存泄漏的问题,需要进一步排查。 最后,总结RSS的重要性,帮助用户理解在性能优化、内存泄漏检测和资源监控中的作用。确保解释清晰,结构合理,使用用户能理解的语言,避免过于技术化的术语,但必要时给出术语的定义和示例。</think>### **RSS 内存详解**(Resident Set Size,常驻内存集) --- #### **一、核心定义** **RSS** 是进程**实际占用物理内存**的关键指标,表示当前时刻进程在物理内存中驻留的数据总量,包括: - 代码段(text) - 数据段(堆、栈) - 共享库中**已被加载到物理内存**的部分 - 内核数据结构(如页表) > $\text{注意}$:RSS **不包含** 已换出到交换区(swap)的内存,也不统计文件系统缓存(page cache)。 --- #### **二、与其他内存指标对比** | 指标名称 | 全称 | 描述 | 典型观测工具 | |---------|------|-----|------------| | **VSZ** | Virtual Memory Size | 进程可访问的**虚拟内存总量**(含未使用的预留内存) | `top`, `ps` | | **PSS** | Proportional Set Size | 按比例计算的共享内存(更精确的物理内存统计) | `smem` | | **USS** | Unique Set Size | 进程独占的物理内存(不含共享库) | `smem` | --- #### **三、技术特征** 1. **物理内存映射** ```bash # 示例:进程内存布局 +-------------------+ | 代码段 (text) | → RSS +-------------------+ | 数据段 (heap) | → RSS +-------------------+ | 共享库已加载部分 | → RSS +-------------------+ | 未使用的预留内存 | → VSZ - RSS +-------------------+ ``` 2. **动态变化特性** - 程序申请堆内存时,RSS **可能延迟增长**(Linux采用惰性分配策略) - 内存释放后,RSS **不会立即减少**(释放的内存可能仍标记为可复用) --- #### **四、实际应用场景** 1. **性能优化分析** ```bash # 查看进程内存(示例) $ ps -eo pid,rss,comm | grep nginx 1234 10240 nginx 5678 20480 nginx # 子进程RSS总和可能超过主进程 ``` - 对比优化前后的 RSS 变化(如内存池启用后 RSS 下降 27%) 2. **内存泄漏检测** ```bash # 持续监控 RSS 增长 $ watch -n 1 'ps -p 1234 -o rss=' ``` - 若 RSS 持续增长且无合理原因 → 疑似内存泄漏 3. **容器资源限制** ```yaml # Kubernetes 内存限制配置 resources: limits: memory: "512Mi" # 实际限制的是 RSS + 部分内核内存 ``` --- #### **五、重要技术细节** 1. **共享内存影响** - 多个进程共享同一个动态库时,该库的 RSS 会被**重复统计** - 举例:10 个进程使用 `libc.so`,每个进程的 RSS 都包含该库的内存 2. **精确测量方法** ```bash # 使用 smem 工具获取 PSS(更准确) $ smem -P nginx PID User Command USS PSS RSS 1234 www-data nginx: worker 1.2M 2.1M 5.0M ``` 3. **Linux 底层实现** - 通过 `/proc/[pid]/statm` 文件获取原始数据 - 第二列为 RSS 页数(通常页大小为 4KB) ```bash $ cat /proc/1234/statm 125680 25430 ... # 25430 pages × 4KB = ~101MB RSS ``` --- #### **六、常见误区** 1. **误区**:RSS 高 = 程序有内存问题 **实际**:数据库缓存、科学计算程序等合理场景需要高 RSS 2. **误区**:RSS 包含所有物理内存使用 **现实**:不包括内核 slab 分配器管理的部分内存 3. **误区**:RSS 下降代表内存已释放 **真相**:Linux 可能将释放的内存保留在缓存中(可通过 `echo 3 > /proc/sys/vm/drop_caches` 强制回收) --- 通过理解 RSS 内存的特性,开发者可以更准确地评估程序真实内存消耗,这对性能调优、资源监控和云原生环境下的资源配置具有重要意义。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值