新足迹

 找回密码
 注册

精华好帖回顾

· [澳洲捡便宜系列]送给每个austeps网友$123! (2005-5-10) hahaer · 迎接虎年的年夜饭 (2022-1-31) liuy16
· 周五拿到Full Licence,开贴庆祝,分享经验。 (2006-3-26) JohnnyWang · 二度日本吃游记 - 更新完毕! (2015-10-29) joaquin
Advertisement
Advertisement
查看: 8460|回复: 29

[IT] asp.net web framework memory [复制链接]

发表于 2022-10-11 06:13 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-10-11 07:32 编辑

active private working set 数字超过1.1gb,是否正常啊?我的老板已经向我抱怨说给的内存从8gb ram升级到16gb ram,仍旧不够网站的使用。老板拒绝加内存到32gb ram.

是否可以认为asp.net和java一样要比rust language多用十倍内存啊?

是否只有把代码用rust language重写才可以根本解决问题啊?
Advertisement
Advertisement

发表于 2022-10-11 08:09 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-10-11 09:12 编辑
cpen5cpen5 发表于 2022-10-11 09:01
你的老板不会同意用rust吧?维护难。


不知道啦,反正老板和我说要用最新的技术,只要和我们的客户比快就行了,不必和amazon较真比速度

维护难,这句话是不对的啦,我写的20多个项目,编译成功后,基本上就差不多了,实际运行一小时后,基本代码就不用再改了,所以应该说是不用维护

发表于 2022-10-11 12:32 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我测试了一部分功能,一个占用500兆的功能现在在rust language编译windows版本运行在iis里占用23兆字节

发表于 2022-10-11 13:12 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-10-11 13:32
我测试了一部分功能,一个占用500兆的功能现在在rust language编译windows版本运行在iis里占用23兆字节 ...

csharp asp.net往往会看到private bytes在不断的增加,但奇怪的是rust language+actix-web竟然那数字不增加,太棒了

发表于 2022-10-12 06:08 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-10-12 07:19 编辑
cppbug 发表于 2022-10-11 17:24
没有具体的产品信息以及技术细节,没有人能给你建议。另外从老板或engineering manager的角度看,是不会同 ...


那你对于如何解决我所面对的asp.net core内存不断增大问题有啥解决方案啊?我想我描述的是普遍问题,任何使用asp.net core的系统应该都面临同样的问题

哦,你说了,不能给我建议

我想公司是要继续赚钱的,我是要继续吃饭的,网站如果崩溃,我就没饭吃,拿人钱财,与人消灾,很简单的事啦。编程语言只是工具,啥工具可以解决问题,就用啥工具啦,不必上升到信仰啦,你说的。rust作为最近五年来全世界程序员最爱的编程语言https://www.turing.com/blog/rust ... ogramming-language/,你的担心是没有根据的,当初reactjs, typescript如果人人都像你这样,网站大概还停留在直接写javascript了,现在多好,大家都懂reactjs,市场上都是会写reactjs的程序员,系统多容易维护啊。

我写程序28年,从来就没有听你说的那观点啦,如果必要,代码可以用汇编语言来写,当初borland delphi里就有大片的汇编语言啦,包括应用层,例如字符串搜索,我从来就没有听到任何delphi程序员抱怨代码里包含了汇编语言,汇编语言代码的维护应该比rust难多了吧

发表于 2022-10-12 06:13 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
chn217 发表于 2022-10-11 20:09
知道内存占用的原因了吗?

我观察内存现象大概已有六年了,一直都是这样越来越大,估计和datatable一个模式,属于要被摒弃的模式
Advertisement
Advertisement

发表于 2022-10-20 06:36 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这是rust和java内存比较的文章https://www.linkedin.com/pulse/s ... java-kai-mindermann

发表于 2022-10-20 06:43 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这是我运行在amazon aws ec2 free tier 一周的程序的截图
那个cpu的尖刺是因为我编译helix editor时造成的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

发表于 2022-10-20 06:45 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-10-20 07:43
这是我运行在amazon aws ec2 free tier 一周的程序的截图
那个cpu的尖刺是因为我编译helix editor时造成的
...

我发觉使用rust language其实是对地球的环保做贡献,可以使用更少的电力做更多的事,我是环保人士啦

发表于 2022-10-20 13:00 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这是对招不到人的回答

Our concerns about the talent pool for Rust were unnecessary. It’s a language that attracts experienced programmers who want to deliver.

reference
https://dailyedit.com/blog/why-r ... hoice-for-startups/

中文翻译

https://blog.csdn.net/csdnnews/article/details/125454335

发表于 2022-10-21 05:23 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
flyspirit 发表于 2022-10-21 02:40
这种内存运行之后不断增大, 一般都是内存泄漏,看看哪些地方用了非托管代码,之后没有释放。
.net core本 ...

根据我的体验,csharp java在内存管理技术层次上是一个级别的,很难像你所说牵扯到内存泄漏啦,我同事写的web service也在同样的服务器上运行到1gb ram,要不你告诉我下你写的csharp代码在服务器上用了多少内存?
Advertisement
Advertisement

发表于 2022-10-21 06:12 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-10-21 07:24 编辑
flyspirit 发表于 2022-10-21 02:40
这种内存运行之后不断增大, 一般都是内存泄漏,看看哪些地方用了非托管代码,之后没有释放。
.net core本 ...


你说的人员招聘,此言差矣,按你所说,公司在招聘人员的时候,不应该选个最优秀的啦,而应该选个最差的啦,因为选了最优秀的,万一以后那最优秀的不能工作了,就在这市场上再招就招不到最优秀的了,相反,找个最差的,那以后再招,总是会招到比最差的好的,这样的说法不是滑天下之大稽吗?

其实一切都在动态变化中,刻舟求剑是要不得的,不然会被时代所淘汰啦,公司也一样会被淘汰,例如王安,yahoo,我1994年起写c++程序,后来写了x86 assembly language, delphi, sql, javascript, typescript, vb, cobol, csharp, abap,golang, rust language, 这年头哪个程序员只会一种编程语言啊?你写过几种编程语言啊?

发表于 2022-10-21 08:36 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-10-21 10:16 编辑
happypy1 发表于 2022-10-21 09:32
不知道你的网站规模和日常流量,还有你是怎么部署你的系统的。比方说,你的服务器和数据库都是跑在同一台ec ...


是的,数据库是mysql,所有的都跑在同一台计算机上,网站服务澳大利亚新西兰一百多家公司,cpu利用率在最繁忙时刻在百分之三十左右,主要问题是内存用了10gb ram,一共有16gb ram

我的理解是内存需求正常的啦,记得2006年时,一个客户花了十万新西兰元组建计算机运行我以前工作的公司开发的j2ee网站运行在orion application server windows上,当时我想,这家公司好有钱,那时我工作的公司提供给客户运行的就是个普通的计算机,也就值个两千多新西兰元。

我想我没必要去分析heap,没那空啦,顺便我诚实的说,我也不知道如何做啦。其实分析了也没用,我写的网站大量用缓存。

发表于 2022-10-21 09:12 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-10-21 10:14 编辑
penn 发表于 2022-10-21 10:11
弱弱的说一句,都服务澳新100多家公司,怎么就不能让内存多个16G呢?不值得吗,不香吗? ...


我和我的上司建议,他拒绝了,你说让我如何做啊?我的上司正确来说是个合格的销售啦,不管写程序的事。

发表于 2022-10-21 09:59 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
kr2000 发表于 2022-10-21 10:55
你这代码多老了,怎么还跑在一台单独的服务器上?
不能花钱升级内存,但能花钱重写代码?
因为需要多用内存 ...

我上司决定使用一台单独的服务器啦,我早就建议说可以考虑运行在amazon linux上省点版权费啦,照我的意思,可以用多个amazon ubuntu linux ec2跑rust language写的网站啦

发表于 2022-10-21 09:59 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
kr2000 发表于 2022-10-21 10:55
你这代码多老了,怎么还跑在一台单独的服务器上?
不能花钱升级内存,但能花钱重写代码?
因为需要多用内存 ...

我就个写网站的啦
Advertisement
Advertisement

发表于 2022-10-21 11:32 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
woshidajiangyou 发表于 2022-10-21 12:10
lz一天到晚推销rust我就笑了

lz如果你用rust重写,然后你离开公司,你老板就要哭了

天外有天,人外有人,不能把自己太当回事啦,以为离开了自己,地球就不转了,兄弟姐妹,你说是吧?

这世界上rust language 程序员多的是啦,不能把我自己一粒灰尘当太阳啦,哈哈

发表于 2022-10-21 11:35 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-10-21 12:37 编辑
penn 发表于 2022-10-21 11:51
遇到不懂技术又抠门的老板,那你不是很辛苦?不过也说明你工作不可替代了,谁愿意动不动就换个语言重新写呢 ...


我喜欢不懂技术的老板啦,其实只要公司里有人棋高一着,就会啥都不顺心啦,这岁月苦短,要让自己活的开心啦

说真的,有水平的同事也要看人的,不然天天被压着多难受啊,我28年工作,还真没遇见过被有本事的同事带着提高技术水平的啦,知识只能自己学和练啦

发表于 2022-11-16 11:03 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
flyspirit 发表于 2022-10-21 22:47
用C#人的比用Rust的多很多, 因此优秀人才也多很多。 所以更容易招聘到。 不知道你怎么会得出要招最差的 ...

你这话让用写java的如何想啊?显然太狭隘了

发表于 2022-11-17 11:47 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
axiaobug 发表于 2022-11-17 12:44
感觉使用了非托管代码。

我想我应该没有,至于使用到第三方dotnet assembly就不知道啦,反正我写的网站用的内存量的表现和我同事用的类似啦,代码是分开的,完全不同的。

发表于 2022-11-17 13:29 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-17 14:26
有些问题你没讲清楚,你的app 是asp.net mvc架构还是asp.net web api + SPA,如果是前者,自然用的内存多。 ...

我从2011年老板雇佣我写网站asp.net mvc架构掺和了asp.net web api + SPA,两者并存
Advertisement
Advertisement

发表于 2022-11-17 13:51 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-17 14:38
如果是mvc,用户login之后会保留session,一堆session数据,rendering也在server端,假如你有100个用户同 ...

我想你说的是asp.net web farm session, 我不用asp.net web farm,应该没有你说的多用户session问题

发表于 2022-11-17 18:09 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-11-17 19:29 编辑
交易人生 发表于 2022-11-17 16:52
没有, 我就是指的asp.net mvc 的session。


我搜索了下project里的关键字session,没找到几个,我是大量使用了controller viewdata,但我认为应该随着客户不访问网站,相应的viewdata应该被自动释放呀,不应该造成内存占用

发表于 2022-11-21 10:23 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-21 11:20
基本概念要搞清楚,.net什么时候释放用过的内存,1)内存不够用的时候,2)到达一个临界点 3)强行用GC.Co ...

强行用GC.Collect并非我想要的

发表于 2022-11-22 05:38 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-21 16:14
那你resource monitor 看到的也不是真实的内存使用情况。

但老板以此和我讨论说内存用的太多。

发表于 2022-11-28 10:36 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
lunatic_C_G 发表于 2022-11-25 17:09
ASP.NET Core 中的内存管理和垃圾回收
按照它这个描述的操作不能解决吗
也可能是static代码问题 分析.netc ...

下面的描述太可怕了,我肯定是用了许多GetHttpClient1这样的代码,我一直以为这是标准代码,让我去共享static GetHttpClient2的方式我肯定是做不到的
____________________________________________________________________________________
HttpClient
未正确使用 HttpClient 可能会导致资源泄漏。 系统资源(如数据库连接、套接字、文件句柄等):

比内存更短缺。
在泄漏时出现的问题比内存更多。
经验丰富的 .NET 开发人员知道要对实现 IDisposable 的对象调用 Dispose。 未释放实现 IDisposable 的对象通常会导致内存泄漏或系统资源泄漏。

HttpClientIDisposable实现,但不应在每个调用上释放。 而是应重用 HttpClient。

下面的终结点会对每个请求创建并释放新的 HttpClient 实例:

C#

复制
[HttpGet("httpclient1")]
public async Task<int> GetHttpClient1(string url)
{
    using (var httpClient = new HttpClient())
    {
        var result = await httpClient.GetAsync(url);
        return (int)result.StatusCode;
    }
}
在负载下,记录了以下错误消息:


复制
fail: Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HLG70PBE1CR1", Request id "0HLG70PBE1CR1:00000031":
      An unhandled exception was thrown by the application.
System.Net.Http.HttpRequestException: Only one usage of each socket address
    (protocol/network address/port) is normally permitted --->
    System.Net.Sockets.SocketException: Only one usage of each socket address
    (protocol/network address/port) is normally permitted
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port,
    CancellationToken cancellationToken)
即使释放了 HttpClient 实例,实际网络连接也需要一些时间才能由操作系统释放。 持续创建新连接时,会发生端口耗尽。 每个客户端连接都需要自己的客户端端口。

防止端口耗尽的一种方法是重用同一个 HttpClient 实例:

C#

复制
private static readonly HttpClient _httpClient = new HttpClient();

[HttpGet("httpclient2")]
public async Task<int> GetHttpClient2(string url)
{
    var result = await _httpClient.GetAsync(url);
    return (int)result.StatusCode;
}
HttpClient 实例会在应用停止时释放。 此示例演示并非每个可释放资源都应在每次使用后释放。
Advertisement
Advertisement

发表于 2022-11-28 10:38 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-22 09:34
那你就加上GC。Collect做个实验,然后再去掉,不然就是瞎猜。

我感觉毫无必要啦,即使在gc.collect后降到10兆字节一下,又有啥作用呢?难道要每隔段时间调用下gc.collect吗?

发表于 2022-11-30 05:44 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
炸鸡翅 发表于 2022-11-29 20:48
别这样写代码。常规做法是用 IoC/Dependency Injection, 把 HttpClient 注册成 Singleton,整个applicati ...

但单一实例会造成等待,莫名损失性能

发表于 2022-11-30 06:20 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-28 12:26
用gc.collect是要证明内存是否用的太多,是不是存在memory leaking,如果用到gc.collect之后,appliaton ...

asp.net core 简单website 用大量内存又不是啥稀奇事,google下就知道了,所以要不用csharp,用rust language啦

发表于 2022-11-30 10:42 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-30 10:05
.net是没有及时collect,其实那些内存已经没用了,不及时回收是为了运行速度,但不是memory leaking。回 ...

我想我有两年使用rust编程语言得到的感受应该可以回答你这个问题

最重要的一点是rust language和c语言都使用llvm编译器得到最终二进制代码

rust language和c/c++语言最大差别是c/c++语言依赖于程序员自觉性调用free, delete释放内存指针(如果程序员因为水平问题,或者写代码开小差,或者走神,忘记释放内存,或使用已释放内存,那都是运行时出错,适合被人hack ),而rust language通过编译将不合规的内存读取作为编译错误阻挡编译成功,强迫程序员改代码直到编译成功为止,而java, csharp是运行环境自动管理内存释放,程序员只管allocate,无需操心内存释放
因为rust language在编译后,所有lifetime的相关代码都不存在最终编译代码,那就是和c语言一样0调用

当然啦,和c语言比,rust language拥有最现代化的多线程编写方式,简单方便使用

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部