写点什么

关于服务端性能、.NET 4.5 和 Bing

  • 2012-08-16
  • 本文字数:1481 字

    阅读完需:约 5 分钟

支持 Bing 和 Yahoo 的服务器占据美国网络搜索市场超过 33% 的份额,这是.NET 4.5 RC 应用程序最大型的持续正式使用。微软的 Bing 和.NET 团队紧密合作,做出了一系列改善,这对于运行大规模.NET 服务器的人们非常有用。

在一次 Channel 9 的采访中,“.NET GC 开发者 Maoni Stephens、性能架构师 Vance Morrison 和 Bing 的前端开发者 Mukul Sabharwal 参与进来,一起讨论实践中的.NET 4.5。” 最有趣的重点特性是多线程的 JIT 编译器。我们不会认为 JIT 对于服务器很重要,因为它可能会在很长时间保持在线。但是由于 ASP.NET 框架的原因,像 Ngen 之类的技术无法很好地工作。可能会有上百甚至上千个使用 Razor 或者 Web 表单编写的视图,而 NGen 无法查看。每次重启服务器或者进程被回收的时候,所有这些程序都需要重新编译。

有了.NET 4.5 和多线程的 JIT,我们发现 Bing 的启动时间减少了一半。这种成果大多数来自于保留了之前 JIT 编译过组件的列表。这个列表会用于在启动时在后台提前处理 JIT 代码。为了避免干扰实际运行代码的线程,即便有更多内核可用,JIT 线程能够使用的也被限制在二到三个。

.NET 4.5 中主要的重点就是对Windows 的事件跟踪(Event Tracing for Windows),或者叫做ETW。这种支持的一部分来自于新引入的 EventSource 类,它让.NET 应用程序可以创建自己的 ETW 事件。另一项改进在于堆栈跟踪领域。在之前的版本中,ETW 无法在 64 位服务器上对于没有预编译的代码(例如,.NET 或 JavaScript)提供精确地堆栈跟踪信息。有了.NET 4.5 和 Windows Server 2012,现在就可以提供堆栈跟踪信息,而不需要附加调试器。

不幸的是,随着异步编程的增多,引入了新的问题。在异步模型下面,处理请求的线程不一定是创建请求的线程。这会产生新的堆栈跟踪信息,难于和资源请求的发出者相匹配。除了在这个领域增加了更多工具之外,微软还开始使用 PrefView 对可视化工具创建原型,期望可以阐明这种问题。最终,微软会把该项支持移动到 Visual Studio 中。

采访的下一部分涉及到后台垃圾回收器(GC),那在.NET 4.5 服务器应用程序中会默认开启。他们谈到了关于固定内存(pinned memory)经常出现的问题。为了决定固定内存真正的消耗有多少,现在每次创建或者修改固定处理器(pinning handler)的时候都会触发 ETW 事件。

.NET 中的固定对象并不一定很昂贵。只有它们恰好位于垃圾回收器想要移动的内存块中的时候,才会导致问题。所以微软现在建议,经常需要固定的对象(例如,异步缓存)应该被重用。如果你那么做,只是在必要的时候才固定,最终它们就会生成两个带有其他长期存在对象的堆,并且不需要移动。

另外一种方法是,只分配非托管的缓存,把它交给操作系统,而不是固定托管的缓存。这里的取舍是,你需要付出每次把缓存复制到托管内存中的代价,这样就不需要付出针对固定内存运行垃圾回收器的代价。

长期以来微软想要提供某种框架支持,来创建可重用的缓冲池。

关于.NET 的垃圾回收器还提到了以下内容:

  • 在 32 位的操作系统下,.NET 堆大约是 2GB。而使用 64 位的操作系统,微软认为使用 10GB 的堆都不常见,甚至有些客户报告使用 50GB 的堆。但是,如果你想要使用大于 2GB 的单个数组,就需要启用 gcAllowVeryLargeObjects 设置。
  • 在.NET 服务器垃圾回收器中,有一种每个堆一个逻辑处理器的方式。小对象堆会在必要的时候重新平衡,但是在.NET 4.5 之前大对象堆不会这么处理。
  • 当使用具有多个 CPU 组的 NUMA 架构时,应该开启 GCCpuGroup 设定。
  • 在性能很重要的操作中,可以使用 SustainedLowLatency 模式临时关闭垃圾回收器

查看英文原文: On Server-Side Performance, .NET 4.5, and Bing

2012-08-16 22:112269
用户头像

发布了 340 篇内容, 共 129.4 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

全网首发!阿里内部出品Spring Security项目实战搭建+思维脑图

Geek_0c76c3

Java 数据库 开源 程序员 开发

仅靠这份Java性能调优实战宝典,薪资暴涨13k,理论+实践7个模块整整15w字

Geek_0c76c3

数据库 开源 程序员 开发

太全了!华为大神珍藏版SpringBoot全优笔记,首次分享

Geek_0c76c3

Java 数据库 开源 程序员 架构

私有云运维管理系统是什么?哪款软件好?

行云管家

云计算 私有云 多云 云管理

2022年阿里最新开源: Java 面试权威指南(泰山版),涨薪 30%不在话下

Geek_0c76c3

Java 数据库 开源 程序员 架构

英特尔Josh Newman: 真正满足用户所需,让人们享受专注与互联的PC体验

科技之家

秒验 客户端SDK返回码

MobTech袤博科技

sdk 客户端

熟读阿里总结的Java10w字总结,15天拿下5个大厂offer(阿里,美团,字节...)

Geek_0c76c3

Java 数据库 开源 程序员 开发

仅凭这份Java高级面试题合集(附面经),成功解决阿里5面,拿下offer

Geek_0c76c3

Java 数据库 开源 程序员 面经

STM32L051测试 (三、I2C协议设备的添加测试)

矜辰所致

stm32 I2C STM32CubeMX STM32L051 10月月更

Github已星标54k,美团大牛强推JDK源码笔记,从多线程基础开讲,太全了

Geek_0c76c3

Java 开源 程序员 架构 框架

leetcode 219. Contains Duplicate II 存在重复元素 II(简单)

okokabcd

LeetCode 数据结构与算法

OpenKruise v1.3:新增自定义 Pod Probe 探针能力与大规模集群性能显著提升

阿里巴巴云原生

阿里云 云原生 OpenKruise

移动端IM产品RainbowChat[专业版] iOS端 v6.0版已发布!

JackJiang

网络编程 即时通讯 IM

阿里巴巴最新发布的Java架构六大专题面试宝典,都是些大厂的面试真题汇总,还不赶紧收藏

Geek_0c76c3

Java 数据库 程序员 面试 开发

英特尔Josh Newman:英特尔多设备协同技术的意义在于真正革新PC体验

科技之家

GitHub star过万!仅靠这份图解算法进阶指南,成功拿下字节offer

Geek_0c76c3

Java 数据库 开源 程序员 架构

LinkedList源码分析(五)

知识浅谈

linkedlist 10月月更

更新:为 NGINX 配置免费的 Let's Encrypt SSL/TLS 证书

NGINX开源社区

nginx 更新 SSL/TLS 协议

阿里资深架构师把大厂高频 2000+ 道 Java 面试题全部总结出来了,分分钟拿捏面试官

Geek_0c76c3

Java 数据库 开源 程序员 开发

从展会看LED显示屏行业发展风向标

Dylan

LED显示屏 led显示屏厂家

开发者嘉年华|博客马拉松挑战,记录学习进程,分享你的知识!

Jina AI

开源 工程师 技术博客 1024

Photoshop软件应用项目(一)

张立梵

设计师 ps 10月月更

京东T8纯手码的Redis核心原理手册,基础与源码齐下,吃透全部知识点

Geek_0c76c3

Java 程序员 架构 面试

一文读懂 MySQL 锁

说故事的五公子

MySQL 数据库

Kata Containers 3.0.0 版本已发布

Geek_2d6073

vue这些原理你都知道吗?(面试版)

bb_xiaxia1998

Vue

【IT运维】自动化运维和普通的运维的区别是什么?哪个好?

行云管家

运维 IT IT运维 自动化运维

假如问:你是怎样优化Vue项目的,该怎么回答

bb_xiaxia1998

Vue

ironSource ROAS 智能优化工具大升级,用户现可查看每日 KPI 数据及趋势走向

Geek_2d6073

技术分享 | 实战演练接口自动化如何处理 Form 请求?

霍格沃兹测试开发学社

关于服务端性能、.NET 4.5和Bing_架构_Jonathan Allen_InfoQ精选文章