日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一:背景

1. 講故事

這個案例有點(diǎn)特殊,以前dump分析都是和軟件工程師打交道,這次和非業(yè)內(nèi)人士交流,隔行如隔山,從指導(dǎo)dump怎么抓到問題解決,需要一個強(qiáng)大的耐心。

前幾天有位朋友在微信上找到我,說他們公司采購的MES系統(tǒng)登錄的時候出現(xiàn)了異常,讓我?guī)兔匆幌拢以谙虢忖忂€須系鈴人,怎么的也不應(yīng)該找到我呀,據(jù)朋友反饋項目已經(jīng)驗收,那邊給了回饋是網(wǎng)絡(luò)的問題,可能沒有幫他們更深入的分析吧,找我的目的應(yīng)該就是驗證下對方公司說的對不對 。

二:WinDbg 分析

1. 真的是網(wǎng)絡(luò)問題嗎

在沒有項目源代碼和日志的情況下,最好的方式就是抓dump,一樣可以找出問題所在,讓朋友在程序登錄卡死的時候抓了一個dump,接下來看下是不是對方工程師所說的網(wǎng)絡(luò)問題。

因為有卡死發(fā)生,必然有一個線程在等待什么,我們可以用 ~*e !clrstack 看下所有的線程的線程棧。

0:000:x86> ~*e !clrstack
...
OS Thread Id: 0x2094 (14)
Child SP       IP Call Site
0f94e888 0000002b [GCFrame: 0f94e888] 
0f94e938 0000002b [HelperMethodFrame_1OBJ: 0f94e938] System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object)
...
0f94ead0 6b53d7b6 System.Threading.Tasks.Task.Wait(Int32, System.Threading.CancellationToken) [f:ddndpclrsrcBCLsystemthreadingTasksTask.cs @ 3167]
0f94eae0 1468ae6b MySQL.Data.Common.Ssl.StartSSL(System.IO.Stream ByRef, System.Text.Encoding, System.String)
0f94eb38 14687a55 MySql.Data.MySqlClient.NativeDriver.Open()
0f94ec04 14686e63 MySql.Data.MySqlClient.Driver.Open()
0f94ec28 14686ac7 MySql.Data.MySqlClient.Driver.Create(MySql.Data.MySqlClient.MySqlConnectionStringBuilder)
0f94ec50 146869ec MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
0f94ec58 14686957 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
0f94ec8c 146863e9 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
0f94ecac 146862ca MySql.Data.MySqlClient.MySqlPool.GetConnection()
0f94ece0 146817c1 MySql.Data.MySqlClient.MySqlConnection.Open()
0f94ed18 0ca28753 xxx.GetMySqlConnection()
...
0f94efec 0ca21902 xxx.UserLogin(System.String, System.String)
...
0f94f4ac 6b4ae9db System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() [f:ddndpclrsrcBCLsystemthreadingthreadpool.cs @ 1161]
0f94f6cc 6c500556 [DebuggerU2MCatchHandlerFrame: 0f94f6cc] 
...

通過觀察發(fā)現(xiàn) 14 號線程在一個 xxx.UserLogin 方法中,應(yīng)該就是朋友點(diǎn)擊的登錄按鈕的邏輯,通讀一下線程棧可以看到它是在 MySql.Data.Common.Ssl.StartSSL 方法中等待,看樣子是在這里超時了。

一般來說 mysql 是內(nèi)網(wǎng)的話,不會特別去配什么 ssl 證書,這個太麻煩了,接下來驗證下 mysql 是內(nèi)網(wǎng)還是外網(wǎng),可以用 !dso 查看mysql 的連接串。

圖片

從上面的 192.168 前綴來看果然是內(nèi)網(wǎng),這時候猜測走 SSL 肯定是意料之外的場景。

2. 真的要走 SSL

記得大概3-4年前在上海上班的時候,曾經(jīng)有一個項目升級之后使用了nuget上的 mysql 8.0,然后項目就無法訪問了,報了什么授權(quán)錯誤,看樣子應(yīng)該就是目前這個項目遇到的場景。

接下來要驗證下這個 mysql 的sdk 是 8.0 的版本嗎?可以用 lm 找下 MySQL.Data 模塊。

0:014:x86> lm
start    end        module name
...
12b40000 12ca6000   MySql_Data   (deferred)    
...

0:014:x86> lm vm MySql_Data
Browse full module list
start    end        module name
12b40000 12ca6000   MySql_Data   (deferred)             
    Image path: C:UsersxxxxMySql.Data.dll
    Image name: MySql.Data.dll
    Browse all global symbols  functions  data
    Has CLR image header, track-debug-data flag not set
    Image was built with /Brepro flag.
    Timestamp:        95CE4983 (This is a reproducible build file hash, not a timestamp)
    CheckSum:         001611FF
    ImageSize:        00166000
    File version:     8.0.29.0
    Product version:  8.0.29.0
    File flags:       0 (Mask 3F)
    File OS:          4 Unknown Win32
    File type:        2.0 Dll
    File date:        00000000.00000000
    Translations:     0000.04b0
    Information from resource tables:
        CompanyName:      Oracle
        ProductName:      MySql.Data.Core
        InternalName:     MySql.Data.dll
        OriginalFilename: MySql.Data.dll
        ProductVersion:   8.0.29
        FileVersion:      8.0.29.0
        FileDescription:  MySql.Data
        LegalCopyright:   Copyright © 2016, 2020, Oracle and/or its affiliates. All rights reserved.
        LegalTrademarks:  
        Comments:         ADO.NET driver for MySQL for .Net Framework and .Net Core

從上面的 Product version 來看果然是 8.0 版本,驗證了我的猜想,接下來就是讓朋友在連接串中加上 SslMode=None 標(biāo)記,類似下面這樣。

<add key="上報平臺1" value="mysql|Database = drp; Data Source = 192.168.xx.xx; port = 3306; User Id = xxx; Password = xxx;SslMode=None" />

把結(jié)果告訴朋友之后,朋友第二天反饋問題搞定。

圖片

不過他做了一個大膽的操作,禁用了 MySQL 的 hava_openssl 。

圖片

說實(shí)話這個影響面太大了,副作用小一點(diǎn)的話加上一個后綴就好,不管怎么樣解決了問題就行。

三:總結(jié)

總的來說這個問題對一個開發(fā)來說很簡單,但如果溝通對象是一個非開發(fā),沒有源碼,沒有日志 還能準(zhǔn)確定位問題,是一件挺有挑戰(zhàn)的事情。

分享到:
標(biāo)簽:NET
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定