使用Dump转储文件排查线上环境服务未知问题 利用Dump转储文件获取正式环境程序堆栈状态服务异常找不到原因时,我们通常通过重新启动服务来尝试解决问题,但是在决定重启之前,请不要立刻重启Windows服务或站点重启服务会让当前案发现场的内存证据丢失,即便是服务恢复正常了,也无法确认问题发生的原因,利用 Windows Dump 转储文件,可以将正在运行中的服务或站点的堆栈信息保存下来,然后在Visual Studio或Win...
Docker中使用createdump调试coreclr 应用上线后可能出现一些问题,通过源码排查,日志分析都不能确定具体原因的情况下,可以使用dump转存文件分析,netcore对于linux系统dump提供了createdump工具,配合lldb sos插件进行clr级分析启动一个dotnet容器,使用特权运行,createdump要访问其他进程内存,特权是必须的docker run --name dotnet --rm -it -...
DDD漫想 领域专用语言领域驱动设计(Domain Driver Design)开发中,最令我震撼的是领域专用语言(Domain specific language),领域专用语言专注于描述当前领域内的业务细节,与具体技术实现细节解耦在领域驱动设计中,具体的技术细节(数据库,消息队列,缓存),以框架的形式存在,其框架的主要作用是将领域专用语言变成可执行的存在DDD中领域专用语言并不是指一种全新...
数据库优化的一些方向 数据库优化,sql与索引效果最明显,也是最简单的方法而想要优化sql和索引,首先就需要知道sql的性能如何,是否有效命中索引,索引匹配行数,查询消耗时间分析这些性能指标,借助sql分析工具是最常用的方法,使用SQLServer中的执行计划,能够看到sql每一个操作的消耗,预读行数有时候,我们不确定哪些sql最终会造成性能影响,就可以借助SQLServer Profiler工具,通过...
利用VS2017跨平台远程调试aspnetcore应用 vs2017开始支持跨平台远程调试coreclr的应用,通常用于调试linux与mac上运行的aspnetcore程序,而如果运行在docker中的应用要使用跨平台远程调试功能,首先运行coreclr应用的环境要可以ssh远程连接,如果应用运行运行在docker中,那么首先需要先安装ssh服务,并启动首先要构建一个包含ssh服务的aspnetcore镜像,Dockerfile如下:...
设计原则,设计模式漫想 软件自产生之后,功能从一开始的简单慢慢演变到复杂,参与到其中的开发人员也越来越多其根本原因,就是需求的改变,在以前,对软件的需求很简单,通常只是固定的一两个功能,开发完成后基本不用维护随着时间的发展,人们对软件的需求越来越复杂,变化越来越快最终产生了各种难以维护的代码,稍微一个改动就会影响到很多现有的功能,需要分析整个程序的逻辑才能去做处理于是编程软件迫切需要一种能够解决扩展难,...
再谈高性能Web服务器,MemoryPool的作用 在以往使用c#实现scoket服务器中,通常遇到一个问题就是内存占用高,GC次数频繁,导致处理能力直线下降其主要原因是在处理socket请求时,大量的申请,复制内存,为了解决这个问题,NET Core 2.1引入了Span<T>,Memory<T>,MemoryPool<T>操作类型其主要目的是能够像c/c++一样,使用指针去访问,释放内存,提...
netcore高性能Web服务器Kestrel分析 Kestrel是aspnetcore中的web服务器之一,其本身有跨平台,轻量级,高性能的特点在 ryzen 1600 12核cpu 测试环境中,瞬间每秒处理请求数能达到2w5以上,与netty不相上下,相当于同样环境下iis ASP.NET处理能力的3倍左右为了了解Kestrel为什么如此强劲,我从github上下载了源代码进行分析,地址是:https://github.c...
Task异步编程,刨根到底 1. 编译器到底对await做了什么await 一个异步操作的时候,实际上编译器会创建一个状态机,这个状态机包含了调用者的上下文变量,状态机使用yield迭代器实现,状态机由clr调度,每次运行都会重新加入回队列,直到Task完成或异常结束2.Task有哪些实现方式经常我们可以看到一些库中使用TaskCompletionSource来创建Task,改变Task的状态,实际上T...
线程安全单例最佳实践,C#中的Lazy是如何保证线程安全的 在.NET 4.0之后,.NET Framework中提供了一种安全的延迟加载类型LazyLazy能够在多线程环境下,保证GetValue函数只执行一次,从而实现单例模式在过去,实现单例模式我们通常使用二次判断锁,或者利用类的静态初始化函数利用Lazy类型,能够简化这一过程,并且性能上更好Lazy创建的时候可以指定线程安装模式,目前有两种模式,PublicationOnly,Ex...
数据库自增主键可能的问题 单表的情况下数据库自增id并没有什么问题,在一张表分布到多个数据库的情况下,使用表自增将会出现id重复的问题解决的办法有两个方向,一个是在应用层做处理,一个是数据库上去做处理1.给每个数据库设置不同的开始id数据库1 从 10000..开始数据库2 从 20000..开始这种办法不依赖于其他服务实现id唯一性,即时其他数据库挂了依然能生成id2.使用一个库...
目前常用的高并发处理手段 最近看了很多高并发的解决方案,高并发并没有通用的解决方案,也不会有现成的demo或者源码可以参考,我在这方面也没有什么经验但是从我看到很多深度不高的文章来说,可以总结出一些可以真正落地的解决办法1.入口流量分发,软件硬件分发常见的nginx代理负载均衡,lvs虚拟ip流量分发,以及F5硬件负载均衡nginx负载均衡实际上是使用http代理来实现的,流量是先进入nginx服务器...
3.本地集群部署与压力测试 nginx安装aspnet示例程序安装tengine安装kubernetes中部署应用很简单,打开dashboard,点击右上角创建即可通过填入镜像名称和端口地址,创建好nginx应用aspnet示例程序镜像: microsoft/dotnet-samples:aspnetapptengine镜像:cloudposse/tengine压力测试工具apache ab测试...
多线程编程,CPU是如何解决多线程内存访问问题的 CPU对内存变量的修改是先读取内存数据到CPU Cache中,然后再由CPU做运算,运算完成后继续写入到内存中在单核CPU中,这完全没有问题,然而在多核CPU中,每一个CPU核心都拥有自己独立的Cache此时同时访问同一个内存地址时,将会把内存值复制到多个CPU的Cache中此时如果对Cache中的值进行修改数据就将会不一致,写入到内存时,内...
2.本地集群管理环境搭建 安装好docker之后我发现一两个应用还好,如果应用一多,一个个管理起来就很麻烦,不如直接用kubernetes来管理集群kubernetes将集群里面的机器称为node,可以是一个docker容器,也可以是一台物理机docker for windows edge版本已经集成了kubenetes,目前只支持lxc默认不开启,可以在设置面板的kubenetes中可以开启该功能开启后会在...
续 CentOS7(mini) 运行MVC5 + Mariadb 上一篇,介绍了在CentOS7上使用mono官方二进制安装包快速安装mono环境并且成功运行了一个Owin自宿主应用(Booker)由于Owin自宿主应用不需要System.Web的支持,所以可以轻松运行在大部分.net运行时中而ASP.NET MVC5依赖于System.Web的一些组件,所以得有web服务器才得能运行在mono的官方网站里面详细介绍了几种运...
从现在开始,使用简单优雅的validata.js 表单验证,是后台开发中万年不变的话题,在经历许多实战之后发现 使用优雅便捷的validate.js实现验证实在是一件非常愉悦的事情 <form data-validate> Enter: <input type="password" data-rule="密码:required;number[请输入一个整数]...
关于阿里的一道笔试题分析 其题目如下:#pragma pack(2)class A{public: int i; union U { char buff[13]; int i; }u; void foo() { } typedef char* (*f)(void*); enum{red, green, blue} color;}a;...
CentOS7(mini) 急速部署ASP.NET应用 从mono 2.8+的时候就开始关注linux运行.NET的一些消息最近闲来无事,发现mono官方已经提供有编译好的源,极大便利了部署过程,不需要自己去编译mono了用Nancy.Owin写了一个小程序,其中的一些坑已经填上,这里是源代码:https://github.com/ss22219/Booker这里用一个全新的系统 上传程序,解压: win...
vc编译 curl 7.36.0 CURL邮件列表中提到官方最新版本的windows devel包中缺少文件,而我又用不到https,所以我就自己下载源码包来编译了 下载源码包:http://curl.haxx.se/download/curl-7.36.0.tar.gz 解压包: tar -zxvfcurl-7.36.0.tar.gz 运行vc命令工具: %comspec...