SlideShare a Scribd company logo
1 of 37
ASP.NETアプリケーションの
最新プロファイリング
C#縛りでLT大会 & Meetup @株式会社bitFlyer本社オフィス
2016/9/13 Kiyoaki Tsurutani
自己紹介
▪ 鶴谷 清明(つるたに きよあき)
▪ 経歴
▪ 金融系SI業界 (~2011/9)
▪ 株式会社gloops (2011/10~2014/6)
▪ 株式会社クラウドナイン (2014/7~2016/5)
▪ フリーランス (2016/6~)
▪ https://www.facebook.com/k.tsurutani
▪ @k_tsurutani
Glimpse
使ったことある人
Application
Insights
使ったことある人
デモ
Windowsノート
持ってなかった
動画デモ
Application
Insights
操作してるとこ
録れてなかった
Glimpse
動画デモ
おさらい
▪ CloudStructures(Redis方面)
▪ Redis Client based on StackExchange.Redis. CloudStructures appends connection
management, auto serialize/deserialize for RedisValue, key distributed
connection(sharding), command logging, Web.config supports and Redis Profiler for
Glimpse.
▪ https://github.com/neuecc/CloudStructures
▪ 前職でフォークした版(Redis瞬断時にThread作られすぎ問題対応、デフォルトシリアライザ変更)
▪ https://github.com/cloud9-plus/CloudStructures
▪ Glimpse.EF6(Database方面)
▪ Glimpse.MVC5(View方面)
▪ SQL Database (or SQL Server 2016)のクエリストア×SSMS(Glimpse関係ない)
Application
Insights
Server Responses
Server Responses
Application Insightsの設定
▪ DependencyTrackingTelemetryModuleを有効化しているとSQLとか見れる
Application Insightsの設定
▪ 本番(高負荷環境)で
DeveloperModeWithDebuggerAttachedTelemetryModuleを有効化しているとつら
い
▪ テレメトリの送信を間引くべし
▪ 秒間最大送信数を設定する方法
▪ サンプリングするパーセンテージを設定する方法
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
</Add>
</TelemetryProcessors>
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.SamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<!-- Set a percentage close to 100/N where N is an integer. -->
<!-- E.g. 50 (=100/2), 33.33 (=100/3), 25 (=100/4), 20, 1 (=100/100), 0.1 (=100/1000) -->
<SamplingPercentage>10</SamplingPercentage>
</Add>
</TelemetryProcessors>
Application Insightsの設定
▪ 環境ごとにInstrumentationKey分けるべし
▪ AppSettingsで設定して環境毎に上書き
▪ Web AppsならPortalでAppSettings設定できる
public class MvcApplication : HttpApplication {
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
TelemetryConfiguration.Active.InstrumentationKey = WebConfigurationManager.AppSettings["InstrumentationKey"];
}
}
Page View
Page View
Server Requests
Server Requests
Failed Requests
Failed Requests
Application Map
Proactive Detection
Proactive Detection
▪ https://azure.microsoft.com/ja-jp/documentation/articles/app-insights-
proactive-detection/
▪ たとえば、あるブラウザーでお使いのアプリケーションのページが他のブラウザーと比較して読み込み
が遅い場合や、特定のサーバーからの要求の処理が遅い場合などに通知します。また、ある地域の
特定の時間帯におけるページ読み込みの遅延など、プロパティの組み合わせに関連する問題も検出
します。
▪ Application Insights によって収集されたすべてのデータが分析されるのですか。
▪ 現時点ではすべてではありません。現在は、要求の応答時間、依存関係の応答時間、およびページの読み
込み時間が分析されます。その他のメトリックの分析も間もなく行われる予定です。
▪ ということなので現状、Failed Requestsのアラート作るべし
Failed Requestsのアラート作り方
自分のLTは
終了なのですが
ここから@neueccスライド
Infinitely Fast Serializer for C#
デシリアライズ速度
無限大高速!!!
な、新シリアライザ+
フォーマット
2016/09/13
neuecc - http://neue.cc/
Microsoft MVP for Visual C#
// こうしてシリアライズしたとしたとして
byte[] bytes = ZeroFormatter.Serialize<Person>(person);
// Infinitely fast!!!
Person person2 = ZeroFormatter.Deserialzie<Person>(bytes);
// Infinitely fast!!!
byte[] bytes2 = ZeroFormatter.Serialize<Person>(person2);
秘訣は...
デシリアライズ
しない!!!
[ZeroFormat]
public class Person
{
[Index(0)]
public virtual int Age { get; protected set; }
[Index(1)]
public virtual string Name { get; protected set; }
}
実行時動的クラス生成
(こんなのが生成されますイメージ)
public sealed class DeserializedPerson : Person
{
byte[] bytes;
public override int Age => FormatReader.ReadInt(ref bytes, 0);
public override string Name => FormatReader.ReadString(ref bytes, 1);
public DeserializedPerson(byte[] bytes)
{
this.bytes = bytes;
}
// 再シリアライズもBuffer.BlockCopyするだけだから理論上最速!
public void SerializeTo(byte[] to)
{
Buffer.BlockCopy(bytes, 0, to, 0, bytes.Length);
}
}
ZeroFormatter(仮)
▪ デシリアライズしないことで最速を標榜するフォーマット
▪ 同種のものとして FlatBuffers(Google), Cap’n Proto
▪ スキーマ言語不要・事前コードジェネレート不要
▪ C#の定義がスキーマ、事前コード生成は実行時IL動的生成でカバー
▪ 継承クラスを作るためのvirtual必須はAnalyzerで警告出してカバー
▪ (とりあえず1st Versionは)C#特化
▪ IList, IDictionary, ILookup, Tupleをサポート
▪ (社内利用事例的に)これが出来ると、あらゆるところが圧倒的に高速化される
▪ サーバー (ASP.NET, Caching)もクライアント (Unity)も超絶高速化/省メモリ化される
▪ 人柱募集中!bitFlyerさんも是非試してください!!
▪ まだ未公開 今月中にはGitHubに公開したい!

More Related Content

Similar to Asp.netアプリケーションの最新プロファイリング

IE6をやめようと思ってももう手遅れ
IE6をやめようと思ってももう手遅れIE6をやめようと思ってももう手遅れ
IE6をやめようと思ってももう手遅れ
Masakazu Muraoka
 
Visual studioonlineとwebサイトで始めるci/cdの第一歩
Visual studioonlineとwebサイトで始めるci/cdの第一歩Visual studioonlineとwebサイトで始めるci/cdの第一歩
Visual studioonlineとwebサイトで始めるci/cdの第一歩
Kazunori Hamamoto
 
RLSにおけるプロダクト:プロジェクトマネジメント
RLSにおけるプロダクト:プロジェクトマネジメントRLSにおけるプロダクト:プロジェクトマネジメント
RLSにおけるプロダクト:プロジェクトマネジメント
Itsuki Sakitsu
 
Mki2014公開用
Mki2014公開用Mki2014公開用
Mki2014公開用
Koichi Ise
 

Similar to Asp.netアプリケーションの最新プロファイリング (20)

IE6をやめようと思ってももう手遅れ
IE6をやめようと思ってももう手遅れIE6をやめようと思ってももう手遅れ
IE6をやめようと思ってももう手遅れ
 
LightSwitchで遊んでみた
LightSwitchで遊んでみたLightSwitchで遊んでみた
LightSwitchで遊んでみた
 
html5とcss3実例紹介とデモ
html5とcss3実例紹介とデモhtml5とcss3実例紹介とデモ
html5とcss3実例紹介とデモ
 
BPStudy#101発表資料
BPStudy#101発表資料BPStudy#101発表資料
BPStudy#101発表資料
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
 
Visual studioonlineとwebサイトで始めるci/cdの第一歩
Visual studioonlineとwebサイトで始めるci/cdの第一歩Visual studioonlineとwebサイトで始めるci/cdの第一歩
Visual studioonlineとwebサイトで始めるci/cdの第一歩
 
Windows10時代のクロスプラットフォーム開発
Windows10時代のクロスプラットフォーム開発Windows10時代のクロスプラットフォーム開発
Windows10時代のクロスプラットフォーム開発
 
RLSにおけるプロダクト:プロジェクトマネジメント
RLSにおけるプロダクト:プロジェクトマネジメントRLSにおけるプロダクト:プロジェクトマネジメント
RLSにおけるプロダクト:プロジェクトマネジメント
 
OneNote のススメ。 Office 365 利活用の促進 - クライアント推し。
OneNote のススメ。 Office 365 利活用の促進 - クライアント推し。OneNote のススメ。 Office 365 利活用の促進 - クライアント推し。
OneNote のススメ。 Office 365 利活用の促進 - クライアント推し。
 
160901 osce2016sre
160901 osce2016sre160901 osce2016sre
160901 osce2016sre
 
そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?
 
クラウドビジネスアプリ ~ Visual Studio 2013 の新しいプロジェクトテンプレート
クラウドビジネスアプリ ~ Visual Studio 2013 の新しいプロジェクトテンプレートクラウドビジネスアプリ ~ Visual Studio 2013 の新しいプロジェクトテンプレート
クラウドビジネスアプリ ~ Visual Studio 2013 の新しいプロジェクトテンプレート
 
Otrs導入事例セミナー
Otrs導入事例セミナーOtrs導入事例セミナー
Otrs導入事例セミナー
 
概説 Data API v3
概説 Data API v3概説 Data API v3
概説 Data API v3
 
詳説 Data api mtddc 拡張版 v3対応
詳説 Data api mtddc 拡張版   v3対応詳説 Data api mtddc 拡張版   v3対応
詳説 Data api mtddc 拡張版 v3対応
 
PowerShell と .Net 使った SharePoint Online の管理手法
PowerShell と .Net 使った SharePoint Online の管理手法PowerShell と .Net 使った SharePoint Online の管理手法
PowerShell と .Net 使った SharePoint Online の管理手法
 
Mki2014公開用
Mki2014公開用Mki2014公開用
Mki2014公開用
 
AWS で社内オンライン勉強会
AWS で社内オンライン勉強会AWS で社内オンライン勉強会
AWS で社内オンライン勉強会
 

Asp.netアプリケーションの最新プロファイリング