惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
S
Securelist
D
Docker
The Register - Security
The Register - Security
GbyAI
GbyAI
Recorded Future
Recorded Future
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
罗磊的独立博客
博客园 - 【当耐特】
F
Full Disclosure
WordPress大学
WordPress大学
腾讯CDC
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
SecWiki News
SecWiki News
L
Lohrmann on Cybersecurity
I
InfoQ
MyScale Blog
MyScale Blog
量子位
Cyberwarzone
Cyberwarzone
博客园 - 三生石上(FineUI控件)
The Hacker News
The Hacker News
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
博客园_首页
H
Help Net Security
K
Kaspersky official blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Webroot Blog
Webroot Blog
Blog — PlanetScale
Blog — PlanetScale
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
The Cloudflare Blog
P
Proofpoint News Feed
V
Visual Studio Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tailwind CSS Blog
爱范儿
爱范儿
P
Privacy International News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
The GitHub Blog
The GitHub Blog
C
Cybersecurity and Infrastructure Security Agency CISA
B
Blog RSS Feed

博客园 - wiseman

universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法 升级framework4.0后form认证票据失效的问题 vs2010下连接sql2000的一些问题 IIS ftp的一个问题:home directory inaccessible MS SQLServer2000 的孤立用户问题及解决. 服务器部署.NET 3.5的问题 愚蠢的错误 - wiseman - 博客园 VS2005项目迁移至VS2008初体验. Linux学习笔记:REHL AS4的上网配置,Http服务安装及配置,ftp服务的安装及配置 Linux学习笔记:需求和安装 通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建. WebService problem:The remote name could not be resolved 简单的WEB程序压力测试. MS ASP.NET AJAX 1.0 Released! 用C#编写flash Application! Atlas提交中文时乱码的完整解决方案. 困扰了两天的问题... .NET2.0中Form验证的问题. 一句C#代码的分析.
烦人的CommunityServer
wiseman · 2007-04-27 · via 博客园 - wiseman

CS2.0的在线列表一直就不能正确的显示在线人数,一直很忙也没时间去管,今天越看越郁闷,狠下心花了半天的时间来找问题的究竟
CS的缓存很庞大,在线列表也当然使用了缓存,大致流程是:
用户执行某个页面的浏览
获取了当前用户的状态
SetLocation(),把用户的当前在线状态写入UsersOnline这个类里的哈希表里(会员表或游客表)
在线用户的写入就是上面这些,需要提一下的是,这里面UsersOnline用单件模式来实现唯一性,但是实例对象不是用静态方式存储,而是以Cache方式存起来,这样一来可以遵循整个CS系统的缓存结构,二来缓存的方式也更加强大(依赖条件,Callback函数等)

接下来是在线用户的消去。正常情况下,只有一个途径会从缓存中消去在线用户(这里不存在缓存过期问题,因为上述缓存建立时是永不过期的),这个途径就是通过Jobs来定时执行消去方法。
在CS中,所有定时执行的类叫一个job,从IJob继承,这里负责在线用户消去的类叫做AnonymousUserJob,具体执行的方法是private void CleanUsers(int settingsid),里面包含了Member和Guest的2个消去方法,他们的作用就是从会员表和游客表中除去已经过了n分钟没有执行动作的用户。
CS处理这个问题非常的马虎,直接hard code了2个参数,5和10,意思是,在执行检查时,5分钟没有活动的游客将被除去,10分钟没有活动的会员将被除去。如果你需要修改,你只能在代码里修改这2个值,然后重新编译,强烈建议自己把这2个值存到config里或者是siteSetting里。

后记:
我把这2个值改完之后,更新了程序,发现在线用户显示有时高有时低,特地写了个程序监视Cache,发现Cache隔了很短的时间就被清空了一次,这导致用户列表的Cache被频繁重置,根本无法正确的反映当前用户在线的信息。
这个问题我个人认为是由于CS系统占用服务器内存很大,导致服务器需要频繁回收Cache,使得Cache失效。但是这里也有疑点,我服务器上内存使用一般才700M左右,而IIS的进程池我并没有限定虚拟内存大小,而且缓存时我设定的优先级是aboveNormal,这个即使需要回收也应该是排在很后的。
在我放CS的服务器上同时还放有3个站点程序,我试着新建了个线程池然后把那3个站点都归入新的线程池中,CS独占一个线程池,这时,在线用户信息显示正常了。
这个问题的答案我并不满意,现在还在继续观察服务器的状态,如果有新的可能,我会来这里再公布我的新结论。

CS2.0系统庞杂,本身性能极差,而缓存使用泛滥,颗粒度的控制很糟糕,造成对服务器的压力巨大,有无数次想要重写一个自己满意的论坛,但是一直没有时间和精力,只好在CS上慢慢的修改,但是目前看来,如果不能对整个内核和缓存结构做出重写的话,依然不能解决根本问题。现在唯一的解决方法是静态化,把CS的帖子浏览和论坛列表静态化来解决用户浏览速度过慢的问题。