最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

asp.net core服務(wù)限制堆內(nèi)存大小的操作方法

 更新時(shí)間:2022年09月22日 09:22:36   作者:L-960  
asp.net core是微軟旗下支持跨平臺的開發(fā)框架,與springboot思想類似,支持ioc等,可以快速的開發(fā)web api等項(xiàng)目,這篇文章主要介紹了asp.net core服務(wù)限制堆內(nèi)存大小,需要的朋友可以參考下

前言

在我們眾多的微服務(wù)項(xiàng)目中,都有限制其堆內(nèi)存大小的需求,以免占用宿主機(jī)內(nèi)存過高。

在java中我們可以通過jvm參數(shù)來很好的控制堆內(nèi)存以及其他參數(shù)。

但是在asp.net core的web服務(wù)中,我們該如何去限制堆內(nèi)存大小呢?

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

1、asp.net core是什么

微軟旗下支持跨平臺的開發(fā)框架,與springboot思想類似,支持ioc等,可以快速的開發(fā)web api等項(xiàng)目
官方文檔:https://learn.microsoft.com/zh-cn/aspnet/core/introduction-to-aspnet-core?view=aspnetcore-6.0

2、限制其堆內(nèi)存最大大小

建議熟讀官方文檔:https://learn.microsoft.com/zh-cn/dotnet/core/runtime-config/

2.1 設(shè)置.NET 運(yùn)行時(shí)的配置

官網(wǎng)文檔:https://learn.microsoft.com/zh-cn/dotnet/core/runtime-config/#runtimeconfigjson

.NET 提供了以下機(jī)制用于配置 .NET 運(yùn)行時(shí)的行為:

  • runtimeconfig.json 文件
  • MSBuild 屬性
  • 環(huán)境變量

通過使用環(huán)境變量來配置某個(gè)選項(xiàng)會(huì)將設(shè)置應(yīng)用于所有的 .NET 應(yīng)用。 在 runtimeconfig.json 或項(xiàng)目文件中配置某個(gè)選項(xiàng)則只會(huì)將設(shè)置應(yīng)用于該應(yīng)用程序。

選擇 runtimeconfig.json文件作為.net運(yùn)行時(shí)的配置文件。

2.2 在項(xiàng)目中創(chuàng)建runtimeconfig.json配置文件

構(gòu)建項(xiàng)目時(shí),將在打包的輸出目錄中生成 [appname].runtimeconfig.json 文件。

如果項(xiàng)目文件所在的文件夾中存在 runtimeconfig.template.json 文件,它包含的任何配置選項(xiàng)都將插入到 [appname].runtimeconfig.json 文件中。

如果自行構(gòu)建應(yīng)用,請將所有配置選項(xiàng)放在 runtimeconfig.template.json 文件中。 如果只是運(yùn)行應(yīng)用,請將其直接插入 [appname].runtimeconfig.template.json 文件中。

在這里插入圖片描述

2.2 限制堆的大小

  • 指定 GC 堆和 GC 簿記的最大提交大小(以字節(jié)為單位)。
  • 此設(shè)置僅適用于 64 位計(jì)算機(jī)。
  • 如果已配置每對象堆限制,則忽略此設(shè)置。
  • 默認(rèn)值(僅在某些情況下適用)是 20 MB 或容器內(nèi)存限制的 75%(以較大者為準(zhǔn))。 此默認(rèn)值在以下情況下適用:
  • 進(jìn)程正在具有指定內(nèi)存限制的容器中運(yùn)行。
  • HeapHardLimitPercent 未設(shè)置。

示例:限制堆內(nèi)存最大為1G

{
    "configProperties": {
      "System.GC.HeapHardLimit": 1073741824
    }
}

3、測試配置是否生效

測試控制器:

[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
    [HttpGet]
    public void testMemory()
    {
        List<byte[]> bytesList = new List<byte[]>();
        while (true)
        {
            Console.ReadKey();
            // 100m
            for (int i = 0; i < 100; i++)
            {
                // 1mb
                byte[] bytes = new byte[1024 * 1024];
                bytesList.Add(bytes);
            }
            Console.WriteLine("當(dāng)前堆內(nèi)存大小 -- " + GC.GetTotalMemory(false) / 1024 / 1024.0 + " MB");
        }

    }
}

結(jié)果,可見配置生效,達(dá)到1g時(shí)報(bào)錯(cuò) System.OutOfMemoryException,然后系統(tǒng)強(qiáng)行g(shù)c,服務(wù)down,配置docker-compose的自動(dòng)重啟即可完成gc后自動(dòng)重啟

當(dāng)前堆內(nèi)存大小 -- 102.0029296875 MB
當(dāng)前堆內(nèi)存大小 -- 202.013671875 MB
當(dāng)前堆內(nèi)存大小 -- 302.0166015625 MB
當(dāng)前堆內(nèi)存大小 -- 402.0126953125 MB
當(dāng)前堆內(nèi)存大小 -- 502.0166015625 MB
當(dāng)前堆內(nèi)存大小 -- 602.02734375 MB
當(dāng)前堆內(nèi)存大小 -- 702.044921875 MB
當(dāng)前堆內(nèi)存大小 -- 802.046875 MB
當(dāng)前堆內(nèi)存大小 -- 902.0498046875 MB
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2]
      Executed action office_conver_server.Controllers.TestController.testMemory (office-conver-server) in 5924.7612ms
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'office_conver_server.Controllers.TestController.testMemory (office-conver-server)'
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
      System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
         at office_conver_server.Controllers.TestController.testMemory() in D:\BaiduSyncdisk\項(xiàng)目目錄\ItemProjects\dotnet\office-conver-server\Controllers\TestController.cs:line 49
         at Microsoft.Extensions.Internal.ObjectMethodExecutor.<>c__DisplayClass33_0.<WrapVoidMethod>b__0(Object target, Object[] parameters)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.VoidResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Obje
ct[] arguments)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
      --- End of stack trace from previous location ---
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
      --- End of stack trace from previous location ---
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object sta
te, Boolean isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
         at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
         at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
         at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
         at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
         at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

4、在docker容器中限制堆內(nèi)存大小

可以采用上述配置,但是缺點(diǎn)就是不靈活,需要頻繁更新代碼,更新容器。。。

添加容器環(huán)境變量DOTNET_GCHeapHardLimit: "value"
注意value是十六進(jìn)制

version: "3"
services:
  officeConverServer:
    image: l-4.1-office-conver-server:test
    ports:
      - 8079:80
    volumes:
      - ./uploadFile:/uploadFile
      #- ./office-conver-server.runtimeconfig.json:/app/office-conver-server.runtimeconfig.json
      - ./appsettings.json:/app/appsettings.json
    environment:
      # 堆內(nèi)存最大限制【十六進(jìn)制】
      DOTNET_GCHeapHardLimit: "40000000"
      TZ: Asia/Shanghai
   # deploy: 
    #  resources: 
     #   limits: 
      #    memory: 1G
    restart: always
    security_opt:
      - seccomp:unconfined

到此這篇關(guān)于asp.net core服務(wù)限制堆內(nèi)存大小的文章就介紹到這了,更多相關(guān)asp.net core堆內(nèi)存大小內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Ext.net中的MessageBox的簡單應(yīng)用實(shí)現(xiàn)代碼

    Ext.net中的MessageBox的簡單應(yīng)用實(shí)現(xiàn)代碼

    今天在項(xiàng)目中要用到簡單的MessageBox的使用。在Ext.net中沒有Winform那么簡單,直接寫MessageBox.show()的方法。于是就去examples.ext.net的例子網(wǎng)站找,想找到個(gè)實(shí)際能用的
    2012-03-03
  • asp.net XML文件操作實(shí)現(xiàn)代碼

    asp.net XML文件操作實(shí)現(xiàn)代碼

    這幾天在項(xiàng)目中用到了XML文件配置存儲(chǔ)一些基本信息,如:參數(shù)、表格等一些信息存儲(chǔ)。由于記錄不是很多,所以用此文件來代替數(shù)據(jù)庫中設(shè)計(jì)的表結(jié)構(gòu)。
    2009-12-12
  • ASP.net Textbox的技巧使用

    ASP.net Textbox的技巧使用

    大家在做Web開發(fā)的時(shí)候,可能也會(huì)遇到之前我所遇到的問題,在使用TextBox控件時(shí),控件的邊緣不能被背景圖片完全覆蓋掉
    2011-09-09
  • asp.net中穿透Session 0 隔離(二)

    asp.net中穿透Session 0 隔離(二)

    上一篇我們已經(jīng)對Session 0 隔離有了進(jìn)一步認(rèn)識,如果在開發(fā)過程中確實(shí)需要服務(wù)與桌面用戶進(jìn)行交互,可以通過遠(yuǎn)程桌面服務(wù)的API 繞過Session 0 的隔離完成交互操作
    2012-11-11
  • .Net的GC垃圾回收原理及實(shí)現(xiàn)

    .Net的GC垃圾回收原理及實(shí)現(xiàn)

    在.Net應(yīng)用程序中很多問題都是沒有正確的理解垃圾回收的工作原理而導(dǎo)致的,本文就介紹一下.Net的GC垃圾回收原理及實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2021-05-05
  • Live Write 的代碼高亮插件 Paste Code

    Live Write 的代碼高亮插件 Paste Code

    這些天,開始使用Live Write寫博客了,有時(shí)候貼代碼時(shí),感覺很不爽。用了很多代碼高亮的工具,大多只支持少數(shù)的幾種語言。
    2011-04-04
  • asp.net實(shí)現(xiàn)利用反射,泛型,靜態(tài)方法快速獲取表單值到Model的方法

    asp.net實(shí)現(xiàn)利用反射,泛型,靜態(tài)方法快速獲取表單值到Model的方法

    這篇文章主要介紹了asp.net實(shí)現(xiàn)利用反射,泛型,靜態(tài)方法快速獲取表單值到Model的方法,結(jié)合實(shí)例形式分析了asp.net中反射,泛型,靜態(tài)方法給model賦值的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • 深入解讀ASP.NET Core身份認(rèn)證過程實(shí)現(xiàn)

    深入解讀ASP.NET Core身份認(rèn)證過程實(shí)現(xiàn)

    這篇文章主要介紹了深入解讀ASP.NET Core身份認(rèn)證過程實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • asp.net實(shí)現(xiàn)生成縮略圖及給原始圖加水印的方法示例

    asp.net實(shí)現(xiàn)生成縮略圖及給原始圖加水印的方法示例

    這篇文章主要介紹了asp.net實(shí)現(xiàn)生成縮略圖及給原始圖加水印的方法,結(jié)合具體實(shí)例形式分析了asp.net圖片的縮略圖與水印操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • uni-app結(jié)合.NET?7實(shí)現(xiàn)微信小程序訂閱消息推送

    uni-app結(jié)合.NET?7實(shí)現(xiàn)微信小程序訂閱消息推送

    本文主要介紹了uni-app結(jié)合.NET?7實(shí)現(xiàn)微信小程序訂閱消息推送,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論

洪泽县| 吉安市| 延寿县| 尼木县| 禹城市| 晋中市| 罗甸县| 延吉市| 和田市| 长泰县| 大荔县| 沛县| 斗六市| 乐昌市| 德阳市| 栾城县| 葫芦岛市| 射洪县| 若羌县| 延庆县| 巴林左旗| 陵水| 四平市| 喀喇| 霍城县| 雷山县| 夹江县| 铁力市| 卓资县| 芮城县| 广河县| 瑞丽市| 岑溪市| 宁明县| 无棣县| 伊金霍洛旗| 溆浦县| 舒城县| 汪清县| 星子县| 深泽县|