为了提高服务器响应速度,服务器配置了8G内存,并把所有数据加载到静态变量,大约1G多的数据,
再加上运行期间的缓存等,服务器物理内存占用最高可以达到6个多G,
在运行时都会出现站点瞬间无响应的情况,后来压力测试了一下,发现每隔1分钟,就会内存回收一次,回收的时候,tps也跌到接近0,通过内存优化,现在内存占用最高跌到5G多,情况有所改善,但是依旧存在内存回收瞬间,站点就停止响应的问题请教这种问题如何避免呢?
再加上运行期间的缓存等,服务器物理内存占用最高可以达到6个多G,
在运行时都会出现站点瞬间无响应的情况,后来压力测试了一下,发现每隔1分钟,就会内存回收一次,回收的时候,tps也跌到接近0,通过内存优化,现在内存占用最高跌到5G多,情况有所改善,但是依旧存在内存回收瞬间,站点就停止响应的问题请教这种问题如何避免呢?
解决方案 »
- 做好的网站要怎样让别人访问
- 求ASP.NET 高手
- 那为推荐个.net的视频教程,谢了
- (新人在线等) 一个关于GridView与模板列的简单问题~~~ :)
- 请教大家
- 如何在.aspx页里得到“DataBinder.Eval(Container.DataItem, "Title").ToString()绑定的值。
- asp.net中session如何设置
- vs2010 asp.net 弹出窗口
- 请教,code first多对多关系里的更新操作问题
- 快速散分1,如何在包含着框架里传递get方法的参数,在线等待 (领分)
- 怎么能让快播播放“http://127.0.0.1/video.ashx?file=test.avi”这样的地址?
- jQuery EasyUI DataGrid 分页 FOR ASP.NET 初始页大小的问题
走本地内存,总比还要经过TCPIP访问网络数据库快吧
数据量大,在内存里面查找到需要的数据花费的cpu很多的。通过网络访问数据库不会慢的。要知道,一个分布式XX管理系统的进行性能测试肯定比不过比较优秀的学生编写微型XX管理系统。因为分布式系统得经过复杂的算法,进行定位缓存在哪个服务器,经过了网络延迟,最后进入到服务器了还得调出缓存,返回数据,又经过网络延迟被应用程序得到。
学生作业级别的微型系统,紧紧在本地操作而已,但是它负载能力肯定不如分布式这样复杂的系统。
站点分拆为WCF进程和站点后,
问题依旧存在,WCF进程依旧会进行GC二代扫描,造成进程挂起,从而站点的请求也被挂起,只不过分拆前是挂起IIS进程,
分拆后,是IIS的请求被WCF进程挂起微软的GC有个通知机制,感觉不靠谱,
GC.RegisterForFullGCNotification(int maxGenerationThreshold, int largeObjectHeapThreshold)这两个参数的含义是指的是第2代中存活的对象个数和大对象堆中对象个数,满足这两个参数后,便会引发通知所以如果值设置太小,可能回收完毕,才收到通知;
如果设置太大,可能收到通知后,很久才回收
求教,如何不回收?难道用C++写代码?
我这边都是大量的Dictionary对象
求教,如何不回收?难道用C++写代码?
我这边都是大量的Dictionary对象
不用C++,也可以让他不回收。
1.所有的对象能用struct的就绝不要用class
2.无论是Dictionary还是List,最好设置好Capacity
现有C#写的解密的方法。如何做字段的内容搜索。各位有高招?
硬件配置比你高 6台1T 内存服务器
但数据量比你的高 加载数据一次吃掉20G 内存
按照你的想法 都考虑进去 其实就是硬件提升
运行一套算法 如果生成20M 数据 当中会吃掉200M 左右内存
这是一个人的 缓存不会直接清掉 内存也不会马上释放 用的JAVA一套框架 如果是100个人 那就多少G了
如果代码修改不了 只能提升硬件
你8g内存在服务器里面算是入门级的了,按你说你的站点一次加载1G,峰值有5~6G,为什么被称为垃圾,因为用不到所以称为垃圾,不同等级的垃圾回收策略不一样,如果你1G的东西时时刻刻在用,我不觉得你内存配置才8G机器的CPU够用。垃圾回收的条件
前面2种情况是严重影响系统运行的,垃圾回收会采用比较高的回收策略,而我觉得你放的东西应该都会满足这个策略,所以怎么看你放进去的东西在你只有8G内存的服务器下始终会被快速回收。而影响垃圾回收的性能其中几个是:
垃圾回收和性能
看来你怎么写性能影响严重“若要回收对象,垃圾回收器必须停止应用程序的所有正在执行的线程。 在某些情况下,例如当应用程序检索数据或者显示内容时,完整垃圾回收可能会在关键时刻进行,而且可能会影响性能。”
你垃圾回收性能也不好,所以你卡了如何避免? 你要么别怎么写,要么再加一台服务器做缓存服务器绕开。net的机制
我觉得,可以考虑用缓存组件。比如memcache之类的。
但也不能把所有数据库数据都放缓存吧,比如可以每次只把登陆对象相关数据加载,过段时间定时清理。
说具体一些吧:
我这边是一个搜索站点,
1、通过程序把几百万的资源 标题和简介进行分词,保存在一个字典里,并序列化为文件
字典是:Dictionary<分词, Dictionary<资源id, 条件数据>>
2、搜索站点启动时加载并反序列化这个字典到一个静态变量
3、站点搜索时,遍历当前分词的字典,比对条件,返回资源id列表
4、程序定时把增量数据提交给站点,去刷新那个字典,以保证数据及时性现在的问题,就是站点频繁进行2代回收,实际回收的内存并不多,主要是因为扫描的数据量太大,主要的几个问题:
1、能不能避免回收时扫描静态变量指向的所有引用?
2、如果把字典放到Redis之类的内存服务器,就增加了网络交互量 和 网络的延时,所以才考虑放在内存里,另一个考虑就是这是个对内服务的接口,如果接口慢,就会导致其它产品慢,引起连锁反应
Dictionary只标识xml的路径