問題タブ [cpu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - Win32: マルチコア/マルチプロセッサ システムでスレッドの CPU 使用率を計算する
私は現在、CPU 使用率を認識する必要がある MFC アプリケーションに取り組んでいます。異なる時点で複数のスレッドが存在する場合がありますが、作業の大部分はメイン スレッドによって実行されます。
このメイン スレッドが使用する CPU の割合を計算する方法を見つけようとしています。ただし、マルチ CPU / マルチコア環境でこれを正確に達成する方法について、いくつかの問題に直面しています。問題は、ほとんどのシステム コールがシステム情報を提供しているように見えるのに対し、私はメイン スレッドが実行されているプロセッサに固有の情報を必要としているということです。
私は WMI を調べましたが、このタスクにはやり過ぎのようです。GetThreadTimes() は必要なものに対して機能しますか?
windows - 32 ビット プロセスと 64 ビット プロセスの memcpy のパフォーマンスの違い
XP64 を搭載した Core2 マシン (Dell T5400) があります。
32 ビット プロセスを実行している場合、memcpy のパフォーマンスは 1.2GByte/s 程度であることがわかります。ただし、64 ビット プロセスの memcpy は約 2.2GByte/s (Intel コンパイラ CRT の memcpy では 2.4GByte/s) を達成します。最初の反応は、64 ビット コードで使用できるレジスタがより広いため、これを単に説明するだけかもしれませんが、独自の memcpy のような SSE アセンブリ コード (32 ビット幅に関係なく 128 ビット幅のロード ストアを使用する必要がある) /64-bitness of the process) は、それが達成するコピー帯域幅の同様の上限を示しています。
私の質問は、この違いは実際には何によるものですか? 32 ビット プロセスは、RAM に到達するために余分な WOW64 フープをジャンプする必要がありますか? それはTLBやプリフェッチャーと関係がありますか、それとも...何ですか?
洞察をありがとう。
Intel フォーラムでも取り上げられました。
c# - C#プログラムはどういうわけかそれ自身のCPU使用率を測定できますか?
長時間実行されるバックグラウンドプログラムに取り組んでおり、デバッグ時にリアルタイムで監視するために、定期的にいくつかの値をフィードする外部ロギングプログラム( SmartInspect )があります。
TaskManagerやIARSNTaskInfoなどの複数のプログラムを簡単に起動できることはわかっていますが、プログラムがX%CPU、ログでこれにフラグを立てます。
メモリ消費量、ワーキングセットなど、いくつかの統計をSmartInspectに定期的にフィードするバックグラウンドスレッドがあります。
このスレッドが、コンピューターのCPUリソースをどれだけ消費しているかをかなり正確に測定することは可能ですか?メインプログラムはシングルスレッドアプリケーション(統計をログに記録するウォッチドッグスレッドを除く)であるため、テクニックがシングルスレッドの使用量に制限されている場合は、それも適しています。
LinuxとCのrusageと呼ばれるものに関連するエントリをいくつか見つけました。これに使用できる同様のエントリはありますか?
編集:わかりました。パフォーマンスカウンターの方法を試しましたが、呼び出されるたびにかなりの量のGCデータが追加されたため、メモリ使用量とガベージコレクションのグラフが急上昇しました。とりあえずこの部分は省きます。
python - Pythonで現在のCPUとRAMの使用状況を取得するには?
Python で現在のシステム ステータス (現在の CPU、RAM、空きディスク容量など) を取得する方法として、どのような方法をお勧めしますか? UNIX および Windows プラットフォームのボーナス ポイント。
私の検索からそれを抽出するいくつかの可能な方法があるようです:
PSI (現在は積極的に開発されておらず、複数のプラットフォームでサポートされていないようです) やpystatgrabなどのライブラリを使用します(2007 年以降はアクティビティがなく、Windows のサポートもないようです)。
os.popen("ps")
*nix システムでは a または類似のコードを使用し、Windows プラットフォームではMEMORYSTATUS
inctypes.windll.kernel32
( ActiveState のこのレシピを参照)を使用するなど、プラットフォーム固有のコードを使用します。これらすべてのコード スニペットを Python クラスにまとめることができます。
これらの方法が悪いというわけではありませんが、同じことを行うための十分にサポートされたマルチプラットフォームの方法が既にありますか?
windows - ColdFusion アプリケーションの誤動作に関する Windows CPU 通知
ColdFusion で記述された Web アプリケーションがあります。これは定期的にサーバーの CPU を 100% 使用し始め、ColdFusion サービスをクラッシュさせます。
自分で問題を再現できなかったので、CPU 使用率が上昇し始めたときにメールで通知してくれるユーティリティを見つけて、サーバーに飛び乗って、FusionReactor で何が起こっているかを確認したいと思います。不正なコードを特定します。
私はグーグルで検索しましたが、適切なユーティリティを見つけることができなかったので、他のプログラマーがこの種の監視を行うことができるツールを見つけたかどうか尋ねてみようと思いました. 私のニーズの詳細を考えると、独自の監視ツールを作成したくありません。
全体的な問題にアプローチするための他の提案がある場合は、それらも聞きたいです。
回答に対する回答:
Windows perfmon を使用してコマンド ラインをトリガーすることは有望に思えます。誰かがそれを行う方法に関するチュートリアルを教えてもらえますか?
SNMP トラップを受信するように設定された監視システムはありません。
ColdFusion 8 Standard Edition を実行していますが、これには ColdFusion パフォーマンス監視ツールが含まれていません。Enterprise のみに含まれています。
Peter Boughton の回答は、おそらく問題を解決するのに役立ちますが、CPU が急上昇し始めると、積極的に問題に対処するのに役立ちません。そのため、まだ通知ソリューションを探しています。
winapi - VISTAでのWin32コンソールプロセス-10%CPU、ただし非常に遅い
Compaq Visual Fortranでコンパイルされたいくつかの計算を実行しているWin32コンソールアプリケーションがあります(これはおそらく問題ではありません)。
それらの多くを同時に実行する必要があります。
XPでは、それらは一緒に約90-100%のCPUを使用し、非常に高速に動作します。Vistaでは、実行する数に関係なく、CPUの10%以下しか使用せず、それぞれ非常に低速で動作します。
かなりのコンソール出力が行われていますが、今では非常に多くなっています。私はすべてのウィンドウを最小化することができます、それは役に立ちません。CPUは基本的に何もしていません...
何か案は?
アップデート:
いいえ、これらは異なるマシンですが、比較的同じハードウェアを実行します。2.スレッドは使用されません。これは、win32でコンパイルされたDOS用の非常に古い(20年)プレーンアプリです。それらが出会うまで反復を計算し、それが持っているすべてを消費することになっています。私の印象-VISTAはそれ以上のCPUを与えません
macos - コアを無効にすると、実行中のプロセスにどのような影響がありますか?
このアプリケーションを Macbook Pro にインストールして、CPU のコアを無効にすることができます。コアを無効にすると、実行中のプロセスにどのような影響があるのでしょうか?
コアを無効にすることが次のことに影響するかどうかも興味があります
- バッテリー寿命
- 発熱
- プロセッサが通常両方のコアの 40% 未満しか使用しない場合のパフォーマンスの向上?
java - JavaでCPU負荷を生成する
スループットテストを行っています。私のアプリケーションはする必要があります
- JMSから読み取る
- いくつかの処理を行います
- JMSへの書き込み
ここでの私の目標は、#2の「いくつかの処理」をシミュレートすることです。つまり、遅延を導入し、イベントを転送する前に、所定の時間(たとえば、500ミリ秒)CPUを占有します。
素朴なアプローチはになりThread.sleep(500)
ます。これにより、実行に適切な遅延が発生しますが、CPUは実行されません。
フィボナッチ数の計算は1つのオプションです。 CPUを一定時間ビジー状態に保つためだけに、興味深い手法を使用した人はいますか?
理想的な特性は次のとおりです。
- (たとえば)ループで回転するだけでなく、さまざまな命令を実行します
- HotSpotVMが最適化するものではありません
- 処理期間を上下に調整する簡単な方法があります(完了するまでの時間はハードウェアによって明らかに異なります)
c++ - CPU をむさぼり食わずに大量の処理を行うにはどうすればよいですか?
質問のタイトルが良くないことはわかっています。説明させてください。
自然言語を xml に変換する大量のテキスト処理を行っています。これらのテキスト ファイルはかなり高速にアップロードされ、キューに入れられます。そこから、テキストを xml に変換し、関連する部分をデータベースにロードするためにパーサーを呼び出すバックグラウンド ワーカーに 1 つずつプルされます (ブースト スピリットを使用)。
パーサーは、これらを一度に約 100 個実行できます。バックグラウンドワーカーにレートリミッターを設定して、キューを頻繁にポーリングするだけにしているため、パフォーマンスが低下しています。http リクエストが減少し始めているため、現在、複数のバックグラウンド ワーカーをスローすることはできません。バックグラウンド ワーカーと Web サーバーが同じマシン上に存在し、CPU使用率が 80 ~ 95% に達しているためだと思いますが、その上でより多くのRAMを使用することもできます。
これをより適切にスケーリングする必要があります。あなたならどうしますか?
いくつかの質問への回答:
私たちはAmazon Webサービスを使用しているため、安価な追加のハードウェアを購入することは、新しいAmazonインスタンスを生成することとは少し異なります.負荷の量でインスタンスを自動生成するコードを誰かが実行したのでしょうか?
ファイルをキューに詰め込むだけのhttpサーバーがあるため、影響を受ける唯一の理由は、CPUが大量の解析関連のものを処理するのに忙しいためです。
パーサー自体では使用していませんが、バックグラウンド ワーカーのレートを既に制限しています。
私はまだナイスを試したことはありませんが、過去に使用したことがあります-それについていくつかのベンチマークを書き留める必要があります
パーサーは Web サーバーから完全に分離されています。Web/アプリケーション サーバーとして nginx/merb があり、バックグラウンド ワーカーとして c++ を呼び出す rake タスクがありますが、それらは同じマシン上に存在します。
linux - 特定のプロセスを CPU % に制限する - Linux
次の問題があります。動的に生成された一部のプロセスは、CPU を 100% 消費する傾向があります。いくつかの基準 (プロセス名など) に一致するすべてのプロセスを特定の量の CPU パーセンテージに制限したいと考えています。
私が解決しようとしている特定の問題は、folding@home ワーカー プロセスを利用することです。私が考える最善の解決策は、定期的に実行され、cpulimit ユーティリティを使用してプロセスを制限する perl スクリプトです (詳細に興味がある場合は、このブログ投稿を確認してください)。動作しますが、ハックです:/
何か案は?プロセスの処理はOSに任せたいです:)
提案に感謝しますが、まだポイントがありません:)
「slowDown」ソリューションは、基本的に「cpulimit」ユーティリティが行うことです。どのプロセスを遅くするか、ワーカー プロセスが終了したら "slowDown" プロセスを強制終了し、新しいワーカー プロセスのために新しいプロセスを開始する必要があります。これは、まさに私が Perl スクリプトと cron ジョブで行ったことです。
主な問題は、どのプロセスを制限するかを事前に知らないことです。それらは動的に生成されます。
1 人のユーザーのすべてのプロセスを一定の CPU パーセンテージに制限する方法があるのではないでしょうか? /etc/security/limits.conf ファイルでユーザーを制限できることを期待して、folding@home ジョブを実行するユーザーを既にセットアップしました。しかし、私が得ることができる最も近いのは、ユーザーごとの合計 CPU 時間です...
「このユーザーのプロセスのすべての CPU 使用率 % の合計は 50% を超えることはできません」と言うことができる何かがあればクールです。そして、プロセスが優先順位に関してCPUの50%を争うようにします...
みんな、あなたの提案に感謝しますが、それは優先順位に関するものではありません.利用可能なCPU時間が十分にある場合でも、CPU%を制限したい. プロセスはすでに優先度が低いため、パフォーマンスの問題は発生しません。
CPUが長時間100%で実行されるのを防ぎたいだけです...