session占用内存计算

本文探讨了应用程序及会话作用域对象如何占用服务器内存,并提供了几种控制内存占用的有效策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用程序和会话作用域内的所有对象都将在服务器进程中占有内存。

® 应用程序作用域对象占用内存数:你产生的全局对象数*对象大小。

® 计算session作用域中占用内存的方法:

会话作用域内的对象数目取决于当前会话的数目,所以除了每个对象的大小外,你

还需要知道当前有多少个用户,以及一个会话将持续多长时间。

例:以购物车为例,购物车内有3件产品,

i) 单个用户购物车对象占用服务器内存量

3*8 8=32个字节

3件产品乘以每一件产品对象的大小,加8是因为保存产品的集合对象引

用也需要一些额外的开销

ii) 假设该网站每小时有10位用户来购物,会话默认有效期是30分钟,所以共有10个活动的用户和10个已经不再活动得到会话,总共20个会话。内存占用量:

20 * 56 =1120个字节

56个字节是每个会话所需要的字节。32 24

iii) 如果每小时2000个用户,内存占用量

4000 * 56 = 220k字节

iv) 以上计算,只是按对象引用来计算一个对象引用的大小为

8字节。如果会话中保存一些大对象,例如大的POJO,假设每个对象10KB,

那么4000个会话就占用40M内存空间(有点大噢)。

® 控制服务器内存提示:

i) 会话中知保存真正需要保存的对象

ii) 会话有效期设成比默认值短

iii) 提供一种显式地结束会话的方法,如“注销”功能,或当某件事完成后,使会话失效,可以使用HttpSession invalidate()方法,当某个会话失效时,可以使得所有的对象被回收。

注:Java中一个对象引用的大小为8字节
<think>好的,我现在需要帮助用户了解如何查看Oracle PDBs占用内存。首先,我得回忆一下Oracle多租户架构中的PDB和CDB的关系。PDB是pluggable databases,而CDB是container database。用户想知道每个PDB占用了多少内存,这可能涉及到Oracle的内存管理机制。 首先,我应该想到Oracle的内存主要分为SGA(系统全局区)和PGA(程序全局区)。SGA是实例级别的,被所有PDB共享,但12c之后可能有资源管理的方式来限制PDB的资源使用。不过,直接查看每个PDB的内存占用可能需要特定的视图或方法。 接下来,用户可能需要知道如何区分各个PDB的内存使用情况。我记得在CDB级别有一些数据字典视图,比如V$RSRCPDB_METRIC,这个视图可以提供实时的资源使用情况,包括内存。可能还需要查看其他的视图,比如CDB_PROCESSES来查看每个PDB的进程数,进而估算PGA的使用情况。 另外,可能需要考虑使用Resource Manager来分配和监控资源。每个PDB可能有自己的内存限制,通过查看资源管理器相关的配置,也能获得一些信息。不过用户的问题主要是查看占用情况,而不是配置限制。 然后,需要具体的SQL查询例子。比如,使用V$RSRCPDB_METRIC来获取每个PDB的SGA和PGA使用情况。这个视图中的SHARED_POOL_ALLOCATED和PGA_ALLOCATED字段可能有用。同时,需要注意权限问题,用户可能需要有访问这些动态视图的权限。 另外,AWR报告也可能包含PDB级别的资源使用情况,但生成AWR报告可能比较麻烦,对于实时查看来说,可能不是最直接的方法。 还要考虑版本差异,比如12c和19c可能在视图或功能上有变化,需要确认用户使用的Oracle版本,但用户没有说明,所以可能需要给出通用的方法。 总结一下,步骤可能包括: 1. 连接到CDB的根容器。 2. 查询相关动态视图,如V$RSRCPDB_METRIC、CDB_PROCESS等。 3. 计算每个PDB的SGA和PGA使用情况。 4. 可能需要结合Resource Manager的信息。 然后,把这些步骤转化为具体的SQL示例,并解释每个部分的作用。同时提醒用户注意权限和版本兼容性。 可能还需要解释SGA和PGA的区别,以及为什么某些部分的内存是共享的,无法完全分割到每个PDB。例如,SGA中的buffer cache是共享的,但通过资源管理可以估算每个PDB的使用量。 最后,确保回答结构清晰,分步骤说明,并提供示例查询,同时指出可能存在的限制和注意事项。</think>在Oracle多租户架构中查看PDB内存占用,需通过CDB级别的动态性能视图。以下是具体方法: 1. **连接到根容器**: ```sql sqlplus / as sysdba ALTER SESSION SET CONTAINER = CDB$ROOT; ``` 2. **查看实时内存分配(12c及以上)**: ```sql SELECT pdb_name, ROUND(sga_bytes/1024/1024,2) AS SGA_MB, ROUND(pga_bytes/1024/1024,2) AS PGA_MB, ROUND((sga_bytes + pga_bytes)/1024/1024,2) AS TOTAL_MB FROM v$rsrcpdbmetric; ``` 3. **查看历史内存统计**: ```sql SELECT snap_id, pdb_id, ROUND(value/1024/1024) AS SIZE_MB FROM dba_hist_rsrc_pdb_metric WHERE metric_name = 'MEMORY_SIZE' ORDER BY snap_id DESC; ``` 4. **查看会话级PGA使用**: ```sql SELECT con_id, SUM(pga_used_mem)/1024/1024 AS PGA_USED_MB FROM v$process GROUP BY con_id; ``` **注意事项**: - 所有数值单位为MB - SGA为共享内存,实际使用可能有重叠 - 需`SYSDBA`权限访问视图 - 精确统计需启用`MEMORY_TARGET`和资源管理 - 不同版本(12c/19c/21c)视图字段可能有差异 建议结合`DBA_PDBs`视图转换`con_id`为PDB名称,或使用Cloud Control图形界面查看更直观的资源分配情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值