1. 程式人生 > >使用PowerShell 監控執行時間和連線情況

使用PowerShell 監控執行時間和連線情況

概念

Powershell 是執行在windows機器上實現系統和應用程式管理自動化的命令列指令碼環境。你可以把它看成是命令列提示符cmd.exe的擴充,不對,應當是顛覆。 powershell需要.NET環境的支援,同時支援.NET物件。微軟之所以將Powershell 定位為Power,並不是誇大其詞,因為它完全支援物件,面向物件的便捷可想而知了。其可讀性,易用性都非常的完美。

    在運維windows 伺服器的時候,其作用是非常大的。簡潔高效等等。這裡我簡單用一個我應用的地方來展示一下。

背景

    有時候我們需要監視來自特定使用者電腦對於資料庫的連線。比如該使用者說,他偶爾會斷開連線或者有時連線某個程式時出現問題,而資料庫就是我的資料庫。這個問題一開始真的很讓我著急(FUCK),因為問題不是經常能夠重現難以追蹤。即使重現了錯誤,可能提供的資訊也不夠完整。

    為了幫助實現對此類問題的troubleshoot ,我編寫了兩個PowerShell 指令碼。指令碼能夠可以無人值守,並且日誌在一段時間後查詢。我打算在使用者的PC上執行這個指令碼,並且該PC在不同的網路或者不同的子網。也可以在同一時間在SQLServer伺服器執行指令碼。會產生三個不同的日誌檔案,然後進行比較。這些指令碼是對於cpu使用和負載佔用很少的輕量級程式。但是必須要謹慎使用執行的查詢,儘量針對一些小的表進行查詢等,比如select count(*)from 小表。

    基本上所有這些指令碼主要實現是:連線SQLServer並且執行查詢。迴圈執行查詢知道手動終止它。假如有錯誤重現了,就會記錄日誌到日誌檔案然後再次連線->執行查詢。

OpenConnQueryCloseConn.ps1 - 這個指令碼作用就是開啟連線資料庫例項,執行sql指令,然後關閉連線。這個處理將會一次又一次的重複直到你手動關閉它。

OpenConnLoopQuery_Long.ps1 - 第二個指令碼的功能就是開啟連線,讓它保持開啟然後重複執行查詢指令碼,直到你手動終止迴圈才會中斷迴圈關閉連線。

 image

圖1 最大區別在於迴圈位置

    兩個指令碼都會在終端和日誌記錄日誌。如果連線產生問題我們也希望在日誌檔案中看到錯誤資訊。當錯誤資訊只在一個日誌檔案中,那麼有時就能引導我們發現網路或者特定的某種錯誤。

PowerShell指令碼的概述

首先我們來看一下OpenConnQueryCloseConn.ps1這個指令碼。這個指令碼一開始先設定連線引數。確保下面的引數是可用的引數。

21-27行就是我們的連線引數和查詢命令變數 。

123

圖2 主要的引數變數

$serverName="伺服器名稱"
$databaseName="資料庫名稱"
$uid="User ID"
$pwd="user Password "
$sqlCommand="命令語句-比如查詢一個小表的行數"
$logLoaction="記錄日誌檔案的位置.   ---  c:\ps\OpenConnQueryCloseConn.log"

指令碼的底部就是迴圈的主要部分。

121

圖3 迴圈部分

    fn_HitSQL 函式大部分工作已經完成了。開啟資料庫連線然後不斷去執行查詢。有很多地方主要的工作就是日誌記錄。如下:

321

圖4 日誌記錄部分

    還有一個函式去記錄連線和錯誤。函式fn_WriteToLog 將錯誤資訊附加上日期後記錄到終端然後新增到日誌檔案中。

321

    做好了以上所有工作後,執行指令碼,當法傷網路連線問題時,就會產生日誌檔案錯誤日誌。如下:

321

錯誤日誌資訊

第二個腳(OpenConnLoopQuery_Long.ps1 )本基本上與第一個一樣如圖1 中所示一樣就是在執行語句後面緊跟著一個迴圈語句這樣避免了關閉連線。在一個連線中不斷重複語句。這裡也就不仔細講解了。

執行兩個指令碼需要執行powershell 指令碼,指令如下,當然也可以自己拼寫:

PowerShell.exe -ExecutionPolicy Bypass -File C:\PS\OpenConnLoopQuery_Long.ps1
PowerShell.exe -ExecutionPolicy Bypass -File C:\PS\OpenConnQueryCloseConn.ps1

需要注意的是要提前設定好路徑“C:\PS”

指令碼下載地址:

沒找到如何上傳指令碼...,有哪位大神可以告知。具體指令碼可向我詢問留言即可。發郵箱

謝謝博友提供方式。

下載地址:

總結

    本篇主要介紹了自己開發的一個利用powershell來實現的迴圈監測連接出現網路異常的指令碼。本質上就是迴圈連線查詢資料庫,記錄連線失敗或者查詢失敗的資訊。之前通過C#和其他開發工具也都實現過不論是windowsService 還是其他小程式。但是感覺powershell開發起來更簡單,對機器效能影響更小,當然python也是一樣的道理。之所以選擇使用powershell主要是學習響應的語法便於將來運維windows伺服器。越來越發現PowerShell的強大,與高手相比還有很大空間要去學習。

相關推薦

使用PowerShell 監控執行時間連線情況

概念 Powershell 是執行在windows機器上實現系統和應用程式管理自動化的命令列指令碼環境。你可以把它看成是命令列提示符cmd.exe的擴充,不對,應當是顛覆。 powershell需要.NET環境的支援,同時支援.NET物件。微軟之所以將Powershell 定位為Power,並不是誇大其詞,

crontab執行時間系統時間不一致

google 服務器 shanghai share crontab執行時間和系統時間不一致

mysql 如何查看sql語句執行時間效率

訪問 執行時間 subquery ber 如果 pan from xtra 重要 查看執行時間 1 show profiles; 2 show variables;查看profiling 是否是on狀態; 3 如果是off,則 set profiling = 1; 4 執

java獲取某段程式碼執行時間js獲取方法執行時間

java獲取某段程式碼執行時間和js獲取方法執行時間 java // 測試執行時間 long startTime = System.currentTimeMillis(); 程式碼段...... // 結束時間 long endTime = Syst

uptime---系統總共執行時間系統的平均負載

uptime命令能夠列印系統總共運行了多長時間和系統的平均負載。uptime命令可以顯示的資訊顯示依次為:現在時間、系統已經運行了多長時間、目前有多少登陸使用者、系統在過去的1分鐘、5分鐘和15分鐘內的平均負載。 語法 uptime(選項) 選項 -V:顯示指令的版本資訊。 例項 使用uptime

Python程式執行時間程序池的詳解

python==2.7 elasticsearch==6.2.0 1:背景介紹,最近有一個需求,從ELK日誌系統前一天的日誌中提取url,url要求去重,然後呢,我用了cosine相似度和字典樹匹配兩種方案來去重,比較之下,字典樹的效果還是要好很多的。 現在遇到的瓶頸是

mysql 如何檢視sql語句執行時間效率

檢視執行時間 1 show profiles; 2 show variables;檢視profiling 是否是on狀態; 3 如果是off,則 set profiling = 1; 4 執行自己的sql語句; 5 show profiles;就可以查

時間都去哪兒了?開源一個統計iPhone上App執行時間開啟次數的小工具【iOS8已失效】

         如今,大家每天都有大量時間花在手機上,但是,大家有沒有想過自己的時間都花在哪些App上了呢?相信很多人都有這樣的需求,不過iOS系統本身並不能顯示每個App的執行時間和次數,因此,本人寫了這樣一個小工具,可以在後臺進行監控當前使用的App,對App的開啟次數和執行時間進行統計,可以顯示今日、

Spring-Boot+AOP+統計單次請求方法的執行次數耗時情況

package com.yanshu.aspect; import java.util.*; import org.aspectj.lang.JoinPoint;   import org.aspectj.lang.ProceedingJoinPoint;   import

Web應用測試監控執行時間 -- JavaSimon

在系統性能調優時以前介紹過使用jmeter-plugins和VisualVM監控系統的總體效能,有時候要找出瓶頸便需要了解某些具體方法呼叫消耗的時間。VisualVm可以做到,不過如果做profiler就太耗資源了。個人覺得JavaSimon是一個很不錯的選擇。

SpringAOP來監控service層中每個方法的執行時間

error try ref args 方法名 str ogg object PE 使用AOP來說,太方便了,並且特別適合這類場景。 代碼如下,這裏是將要統計的信息寫到log文件中,也可以設計成寫入表中。 package com.ecsoft.interceptor; im

四種快排與兩種歸併插入排序 大資料量執行時間比較

#include"iostream" #include"iomanip" #include"stdlib.h" #include"time.h" #include"string" /*由於我電腦記憶體有限所以資料量最大能執行在20w*/ //三路快排適用於有大量重複值的資

實現Xshell斷開連線情況下Linux命令繼續執行(nohup命令)

實現Xshell斷開連線情況下Linux命令繼續執行 1、將原命令語句改為:nohup 命令語句 & 2、回車執行,再回車,視窗中會顯示一個程序號 3、如果中途想關閉,可執行:kill -9 程序號。如果想檢視命令執行情況,可執行:cat nohup.out  

日誌中每段程式碼執行時間不等於整段程式碼執行的總時間

程式碼邏輯: def  getInlink()      A  -> B  -> C ->  D   在tornado中呼

如何在Ubuntu上獲取啟動時間正常執行時間

那麼我們如何在Ubuntu上獲得準確的啟動時間和系統正常執行時間? 本文介紹了uptime命令用於實現此任務的用法。 我們在Ubuntu 18.04 LTS系統上執行命令。 您可以通過系統Dash或Ctrl + Alt + T快捷方式開啟終端應用程式。 用法: uptime [選項] 選項

Java agent+ASM實戰--監控所有方法執行時間

本文建立在對instrumentation和agent有初步的瞭解的前提下閱讀,關於這2個類的講解在其它文章中。 這是一個maven專案,pom中需要的配置,lib中有asm的jar包 <plugin> <artifact

在 Spring Boot 中使用 Spring AOP AspectJ 來測量方法的執行時間

原文連結:https://dzone.com/articles/logging-average-method-execution-times-via-aspectj 作者:Murat Derman 譯者:Darren Luo 想要了解更多有關測量方法執行時間的資訊?檢視本教

10.執行執行緒池的區別,執行緒池有哪些,什麼情況下使用

一:執行緒和執行緒池的區別 (1)new Thread 的弊端       a. 每次new Thread時,新建物件效能差。       b. 執行緒缺乏統一管理,可能無限制新建執行緒,相互之間競爭,可能佔用過多系統資源導致宕機或oom。       c. 缺乏更多功能

學習筆記-python守護執行時間延遲

python守護執行緒和時間延遲 也許我們存在這種需求,有些執行緒是處於監聽功能的執行緒,希望其一直執行下去,直到關機,那麼對於一個程式而言,在啟動之後一個程序裡面可以存在很多個執行緒,其他執行緒先執行完成,如果存在某個執行緒需要一直執行,那麼這個程式就無法退出,此時就需要守護執行緒這種

關於linux的程序中的各個執行緒cpu佔用情況的分析檢視

我們常常會在新開的服搭建一個遊戲的server,有時候要進行壓力測試,那麼怎樣來看呢,一般我們會通過top命令檢視各個程序的cpu和記憶體佔用情況,獲得到了我們的程序id,然後我們或許會通過pstack命令檢視裡邊的各個執行緒id以及相應的執行緒如今正在做什麼事情,分析多組資料就能夠獲得哪些執行緒裡