質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

2875閲覧

C#ではなくコマンドプロンプトやバッチでCPU使用率と物理メモリ使用量、仮想メモリ使用量を1分毎に表示しサーバーの負荷率を履歴として取りたいと考えています。テキストファイルへの出力。

ShinyaKojima

総合スコア18

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2019/04/12 05:04

編集2019/04/12 05:36

いつもお世話になっております。

先日C#でCPU使用率やメモリ使用量1分毎に表示しテキストファイルへ出力という質問をさせていただき。実現することができました。
しかし、そのプログラムを報告したら C#ではなく コマンドプロンプトやバッチで処理できないの?と言われました・・・

私の中ではそのプログラムをタスクスケジューラで毎日動かして24時間データを取る予定だったのですが

今回はC#ではなくコマンドやバッチで
・現在日時、CPU使用率、物理メモリ使用量、仮想メモリ使用量を1分毎にテキストファイルへ書込み
・24時間データを1分毎に取り続ける。テキストのファイル名は当日の日付です。
・毎日24時間分のデータを取って1ファイルずつ増えていくイメージです。

C#では以下のように書いてます。

using System; using System.Threading; using System.Diagnostics; using System.IO; namespace CodeRecipe_Timer_CS { class Program { static void Main(string[] args) { using (PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total", true)) { TimerCallback tDelegate = new TimerCallback(GetCpuUsage); using (Timer oTimer = new Timer(tDelegate, pc, 0, 60000)) { Thread.Sleep(734400000); } } Console.WriteLine("Timer を停止しました。終了するには何かキーを押してください。"); Console.Read(); } static void GetCpuUsage(object state) { string today = DateTime.Now.ToString("yyyyMMdd"); PerformanceCounter pc = state as PerformanceCounter; DateTime dtNow = DateTime.Now; System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess(); p.Refresh(); if (pc != null) { //Console.WriteLine(String.Format("現在のCPU使用率は {0:f}% です。" + dtNow.ToString(), pc.NextValue())); //Console.WriteLine("物理メモリ使用量: {0}", p.WorkingSet64); //Console.WriteLine("仮想メモリ使用量: {0}", p.VirtualMemorySize64); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today + ".txt", String.Format(dtNow.ToString() + "  ")); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today +".txt", String.Format("現在のCPU使用率は {0:f}% です。", pc.NextValue())); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today + ".txt", String.Format(" 物理メモリ使用量: {0}", p.WorkingSet64)); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today + ".txt", String.Format(" 仮想メモリ使用量: {0}", p.VirtualMemorySize64) + Environment.NewLine); } } } }

流れとしてはProcessor Time", "_Total"でCPUの使用率を取り出し

Timer oTimer = new Timer(tDelegate, pc, 0, 60000))
{
Thread.Sleep(734400000);
で60秒毎にデータを取るようにして24時間後に停止する
後半の
File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV" + today + ".txt", String.Format(dtNow.ToString() + "  "));
File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV" + today +".txt", String.Format
("現在のCPU使用率は {0:f}% です。", pc.NextValue()));
File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV" + today + ".txt", String.Format(" 物理メモリ使用量: {0}", p.WorkingSet64));
File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV" + today + ".txt", String.Format(" 仮想メモリ使用量: {0}", p.VirtualMemorySize64) + Environment.NewLine);
では現在の日時、CPU使用率、物理メモリ使用量、仮想メモリ使用量などを書き込み改行
という処理をしています。

同じ動作を実現させるためにはどのようなコマンドを入力すればよいのでしょうか?

バッチやコマンドプロンプトを扱ったことがなく

検索した結果
ファイル名に日付を指定するバッチ?

@echo off echo %date% echo %time% set yyyy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% set filename=%yyyy%-%mm%%dd%-%hh%%mn%%ss% echo test >> log_%filename%.txt
C:\> typeperf -sc 1440 -si 60 "\Processor(_Total)\% Processor Time" > typeperf.txt

※1分(60秒)間隔で1日(1440回)実行する場合の記述

@echo off :label01 echo %date% %time% tasklist ping localhost -n 60 > nul goto label01

メモリの使用量を60秒間隔で実行するバッチ

ですが これらの組み合わせかたや使い方がよく分かりません。

どうかご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/04/12 05:11

C# タグは関係ないので外してください。コードは参考に留め、C# を知らなくてもわかるように仕様説明してください。
KoichiSugiyama

2019/04/12 05:29

質問者さんが報告した相手(上司?)がどのような意図で「コマンドかバッチ」って言ったのでしょうか? (質問者さんが作ったコンソールアプリもコマンドといえばコマンドですよね) 手直しをするのに開発ツールが必要ないもの、という意味でしょうか? Windowsがもともと持っているツールを組み合わせるのであれば、管理用のコマンドを調べて目的の機能にあったものがあるのかないのか調べるところから始める必要がありますし、wshを使えば.netのオブジェクトも使用可能ですので、現状のC#のプログラムを参考にスクリプトを書くこともできると思います。 そのあたりもうちょっと整理してみてはいかがでしょうか。
ShinyaKojima

2019/04/12 05:42

報告した相手はC#を全く知らないのでサーバー上で実行や編集する際に統合開発環境(Visual Studio)などをわざわざインストールしなければいけないのか。とのことです 私自身もそこまで詳しいわけではないので作ったコンソールアプリを実行するだけのバッチファイルなどがあれば大丈夫かといったイメージなのですが もっと複雑なのでしょうか?
Zuishin

2019/04/12 06:02 編集

統合開発環境は必要性ありませんが、実行ファイルと .NET 実行環境は必要です。Windows なら実行環境は多分問題ないと思いますが、バージョンが古いかもしれないので保証はできません。
ShinyaKojima

2019/04/12 06:02

実行ファイルというのはC#で作ったプログラムファイルProgram.csのことですよね .NET実行環境はWindows→Microsoft.NET→Framework64→v3.5が入っていれば大丈夫ですか?
Y.H.

2019/04/12 06:07

目的が、作ることではなくCPU使用率、物理メモリ使用量、仮想メモリ使用量を監視および履歴を見ることなのであれば、Windows標準のパフォーマンスモニターでいいんじゃ?
Zuishin

2019/04/12 06:11

実行ファイルの拡張子は exe です。リリースビルドしたらプロジェクトディレクトリの bin\Release にできています。v3.5 かどうかは何をターゲットに作ったかによって違うので IDE からプロジェクトのプロパティを見てください。
ShinyaKojima

2019/04/12 06:15

見るだけならパフォーマンスモニターのみで良いのですが 目的としては日時、CPU使用率、物理メモリ使用量、仮想メモリ使用量を履歴としてテキストに保管して 一日に数万件の装置のデータ(8ギガくらい)がサーバーに送られてくるので、いつ何時頃、装置などに異常があったか、データの取りこぼしなどの異常があったかなどに早く気付けるようにする為だそうです。なので24時間ずっと1分毎にCPU使用率やメモリの使用量などをテキストファイルに履歴として残したいとのことです。
Y.H.

2019/04/12 06:23

24時間日毎に履歴として残せますよ。 レポートで過去分についてもグラフィカルに閲覧もできるし。
ShinyaKojima

2019/04/12 06:27

>Zuishinさん まだまだ初心者なもので リリースビルド:普通に動かすためのプログラム(になるモード)ということですよね Frameworkの中にはv1.03705からv4.0.30319まで数種類あるみたいなのですが 何をターゲットにしたかという部分がよく分かりません。 少し詳しくお願いします。
ShinyaKojima

2019/04/12 06:29

>Y.H.さん パフォーマンスモニターのみで24時間日ごとに履歴として残せるということでしょうか? そこを詳しく教えていただけると助かります。
Y.H.

2019/04/12 06:42

[タスクマネージャ]や[リソースモニタ]ではなく 「パフォーマンスモニター」ですよ。 記事は古いですが基本的に使用方法は変わってません。 この辺りを参照されると概要が把握できると思います。 WIndowsXP/Vista/7/8/10 Server製品すべてに同じ形で存在します。 データコレクタセットによる負荷状況記録 ( https://news.mynavi.jp/itsearch/article/hardware/924 )
ShinyaKojima

2019/04/12 08:33

パフォーマンスモニターを使って.blgをcsvに変更したら良さそうですね 一度自分で使ってみて操作に慣れてみようと思います。 ありがとうございました。 ベストアンサーに選びたいのですが、回答箇所が・・・(;^_^A 新たに回答に記入していただけたらベストアンサーに選びたいと思います。
Y.H.

2019/04/12 08:36

コメントに記載したものを回答として記載しました
guest

回答1

0

ベストアンサー

目的が、作ることではなくCPU使用率、物理メモリ使用量、仮想メモリ使用量を監視および履歴を見ることなのであれば、Windows標準のパフォーマンスモニターでいいんじゃ?

記事は古いですが基本的に使用方法は変わってません。
この辺りを参照されると概要が把握できると思います。

WIndowsXP/Vista/7/8/10 Server製品すべてに同じ形で存在します。
(news.mynavi.jp)データコレクタセットによる負荷状況記録

投稿2019/04/12 08:35

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問