パフォーマンスチューニング
概要
PlantPulse のパフォーマンスは、収集 → 処理 → 保存 の各レイヤーにおける最適化を順序立てて行うことで向上します。闇雲に全ての値を増加させるのではなく、監視指標を確認しながら ボトルネック箇所のみ を調整することが重要です。
チューニング原則 3つ
- 一度に1つのみ: 複数の変数を同時に変更すると、どの変更が効果をもたらしたかが不明になります。
- 運用データに基づく: ステージ環境で実際のトラフィックを再現してから変更してください。
- 記録を残す: 変更値および変更前後の指標を GitOps / 運用 wiki に記録してください。
運用環境別の推奨スタート値
| 環境 | CPU | メモリ | ディスク | 推奨 PIPELINE_THREADS | 推奨 PIPELINE_RATELIMIT |
|---|---|---|---|---|---|
| 開発 | 16 vCPU | 64 GB | SSD | 16 | 10,000 MPS |
| 標準 | 32 vCPU | 128 GB | NVMe | 36 | 40,000 MPS |
| 大規模 | 48+ vCPU | 200+ GB | NVMe | 64 | 100,000 MPS |
env.sh ベースの主要チューニング変数
運用環境で最も頻繁に調整される変数は、ホストの bin/env.sh と compose/docker-compose.yml で管理されます → 環境変数リファレンス
| 変数 | デフォルト | 影響 |
|---|---|---|
PP_CLUSTER_CORES | 30 | Spark / 分析コアの割り当て |
PP_CLUSTER_MEMORY_BY_CORE | 2G | Spark executor メモリ/コア |
PP_LANG / PP_TZ | ko / Asia/Seoul | JVM ロケール / タイムゾーン |
JAVA_TOOL_OPTIONS | 自動生成 | 全ての子 JVM に自動適用 |
詳細な変数は プロパティリファレンス の env.sh 変数インデックスを参照してください。
計測ツール
チューニング前後の比較に使用できるツール:
cd /opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin
./status.sh # 모듈별 CPU / 메모리(PSS) 요약
./ops-check.sh # 헬스 + critical log
./memory-check.sh # 모듈별 메모리 상세
./memory-rank.sh # 메모리 순위
./pd node tpstats # Cassandra 스레드풀
./pd node compactionstats # Cassandra 컴팩션
./pd node table-stats # 테이블별 통계
./pd node proxyhistograms # Cassandra 지연 히스토그램
# Kafka consumer lag
./pd node topic
# JVM Heap / GC (컨테이너 진입 후)
./shell.sh
jcmd <pid> GC.heap_info
jcmd <pid> GC.heap_dump /tmp/heap.hprof
外部監視(Grafana / Prometheus)については システム監視 ページを参照してください。
注意: パフォーマンスチューニングの最適値は、サーバー仕様、データ規模、利用パターンにより異なる場合があります。以下の推奨設定を起点として、監視結果を確認しながら段階的に調整していくことをお勧めします。
エンジンパイプラインチューニング
設定ファイル: plantpulse-server/config/plantpulse-engine.properties
注意: エンジンパイプラインは、センサーから収集されたデータが処理される主要経路です。この設定により、データの処理速度と処理量を制御できます。
パイプライン主要パラメータ
| パラメータ | デフォルト値 | 説明 | チューニングガイド |
|---|---|---|---|
engine.pipeline.threads | 36 | パイプラインワーカースレッド数 | ホストのコア数の 70~80% を推奨します(検証環境 48 コア → 36) |
engine.pipeline.ratelimit | 40000 | 1 秒あたりの最大処理メッセージ数(MPS) | サーバー仕様に合わせて調整してください |
engine.pipeline.queue.size | 1200000 | パイプラインキューの最大サイズ | メモリ余裕分に合わせて調整してください |
engine.pipeline.queue.o3.delay | 50 | Out-of-Order 遅延処理( ms) | ネットワーク遅延に応じて調整してください |
engine.pipeline.task.mode | SINGLE | パイプラインタスクモード | SINGLE または MULTI |
engine.async.parallelism | 256 | 非同期並列処理数 | CPU コア数の 8~16 倍を推奨します |
ストリーミング設定
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
engine.stream.processor | DIRECT | ストリーム処理モード |
engine.streaming.messaging.warning.ms | 5000 | メッセージ遅延警告基準( ms) |
engine.streaming.messaging.timeout.ms | 10000 | メッセージタイムアウト( ms) |
engine.streaming.messaging.timeout.store.type | FILE_QUEUE | タイムアウトメッセージの保存方式 |
engine.streaming.messaging.timeout.recovery.type | DB | タイムアウト復旧方式 |
ワークスレッド
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
engine.job.thread.asset | 8 | アセットワークスレッド数 |
engine.job.thread.point | 8 | ポイントワークスレッド数 |
仕様別推奨設定
以下の表は、サーバー仕様に応じた推奨設定値です。運用環境の仕様に該当する列を参考にして設定してください。
| 項目 | 小規模(8 コア / 64GB) | 中規模(16 コア / 128GB) | 大規模(32 コア / 256GB) |
|---|---|---|---|
pipeline.threads | 16 | 36 | 64 |
pipeline.ratelimit | 10,000 | 40,000 | 100,000 |
pipeline.queue.size | 300,000 | 1,200,000 | 3,000,000 |
async.parallelism | 64 | 256 | 512 |
Cassandra チューニング
設定ファイル: plantpulse-storage/db/cassandra/conf/cassandra.yaml
注意: Cassandra は時系列データを保存する主要なデータベースです。データ規模の増加に伴い、Cassandra チューニングが全体パフォーマンスに大きな影響を与えるため、運用環境に合わせた調整をお勧めします。
メモリ設定
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
memtable_heap_space | 2GiB | Memtable ヒープメモリ |
memtable_offheap_space | 2GiB | Memtable オフヒープメモリ |
memtable_allocation_type | offheap_objects | メモリ割り当てタイプ |
memtable_flush_writers | 8 | Memtable フラッシュスレッド数 |
並行性設定
| パラメータ | デフォルト値 | 説明 | チューニングガイド |
|---|---|---|---|
concurrent_reads | 256 | 同時読み取りスレッド | ディスク数 × 16 を推奨します |
concurrent_writes | 256 | 同時書き込みスレッド | CPU コア × 8 を推奨します |
concurrent_counter_writes | 256 | 同時カウンター書き込み | concurrent_writes と同じ値で設定してください |
concurrent_compactors | 8 | 同時圧縮スレッド | CPU コア数の 1/4 を推奨します |
コミットログ
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
commitlog_sync | periodic | 同期方式 |
commitlog_sync_period | 10000ms | 同期周期 |
commitlog_segment_size | 320MiB | セグメントサイズ |
commitlog_total_space | 32GiB | コミットログ全体空間 |
タイムアウト
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
read_request_timeout | 10000ms | 読み取りタイムアウト |
write_request_timeout | 60000ms | 書き込みタイムアウト |
counter_write_request_timeout | 10000ms | カウンター書き込みタイムアウト |
cas_contention_timeout | 1000ms | CAS 競合タイムアウト |
truncate_request_timeout | 600000ms | Truncate タイムアウト |
圧縮戦略
PlantPulse は時系列データの特性に適した UCS(Unified Compaction Strategy) を使用します。
注意: 圧縮(Compaction)は Cassandra がディスクに保存されたデータファイル(SSTable)を整理・統合する処理です。適切な圧縮戦略を使用することで、ディスク容量を節約し、読み取りパフォーマンスを向上させることができます。
storage.properties 設定:
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
storage.table.compaction.strategy | UCS | 圧縮戦略(UCS または TWCS) |
storage.table.compaction.strategy.ucs.scailing_parameter | T8 | スケーリングパラメータ |
storage.table.compaction.strategy.ucs.min_sstable_size | 128MiB | 最小 SSTable サイズ |
storage.table.compaction.strategy.ucs.target_sstable_size | 512MiB | 目標 SSTable サイズ |
storage.table.compaction.strategy.ucs.base_shard_count | 8 | ベースシャード数 |
storage.table.compaction.strategy.ucs.max_sstables_to_compact | 6 | 最大圧縮 SSTable 数 |
圧縮
ZStandard 辞書圧縮を使用します:
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
storage.compression.zstd.type | ZstdDictionaryCompressor | 圧縮方式 |
storage.compression.zstd.level | 3 | 圧縮レベル(1~22、高いほど圧縮率は上がりますが処理速度は低下します) |
TTL(データ保存期間)
storage.properties でテーブル別の TTL を設定します。TTL を超過したデータは自動的に削除されるため、データ保存要件に合わせて設定してください。
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
storage.tag.point.ttl | 62(日) | タグポイント元データ |
storage.tag.point.map.ttl | 1(日) | タグポイントマップ |
storage.tag.point.sampling.ttl | 93(日) | サンプリングデータ |
storage.tag.point.snapshot.ttl | 93(日) | スナップショットデータ |
storage.tag.point.aggregation.ttl | 93(日) | 集約データ |
storage.tag.point.archive.ttl | 365(日) | アーカイブデータ |
storage.tag.blob.ttl | 93(日) | BLOB データ |
storage.asset.data.ttl | 10(日) | アセットデータ |
storage.asset.data.sampling.ttl | 31(日) | アセットサンプリングデータ |
Cassandra パフォーマンス確認コマンド
以下のコマンドを使用して Cassandra のパフォーマンス状態を確認できます:
# 컴팩션 상태 확인
/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd node compactionstats
# 테이블별 통계 확인
/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd node table-stats
# 테이블 히스토그램 (읽기/쓰기 지연)
/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd node table-histograms
# SSTable 크기 확인
/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd node sstable-size
# 스레드풀 통계
/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd node tpstats
Spark チューニング
設定ファイル: plantpulse-analytics/spark/conf/spark-defaults.conf
注意: Apache Spark は大規模データ分析のための分散処理エンジンです。分析ジョブの速度と安定性を向上させるため、以下の設定を参考にしてください。
リソース割り当て
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
spark.cores.max | 16 | Spark 最大使用コア数 |
spark.driver.cores | 2 | ドライバーコア数 |
spark.driver.memory | 4g | ドライバーメモリ |
spark.executor.cores | 1 | Executor コア数 |
spark.executor.memory | 2G | Executor メモリ |
spark.executor.memoryOverhead | 2g | Executor オーバーヘッドメモリ |
動的割り当て
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
spark.dynamicAllocation.enabled | true | 動的 Executor 割り当て |
spark.dynamicAllocation.minExecutors | 2 | 最小 Executor 数 |
spark.dynamicAllocation.maxExecutors | 16 | 最大 Executor 数 |
spark.dynamicAllocation.executorIdleTimeout | 30 | アイドル Executor 解放時間(秒) |
シャッフルと並行度
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
spark.default.parallelism | 64 | デフォルト並行度 |
spark.sql.shuffle.partitions | 128 | SQL シャッフルパーティション数 |
spark.sql.adaptive.enabled | true | 適応的クエリ実行 |
spark.sql.adaptive.coalescePartitions.enabled | true | パーティション自動マージ |
JVM 設定
Spark ドライバー/Executor は両方とも ZGC を使用します:
-XX:+UseZGC
-XX:+AlwaysPreTouch
-XX:+UseTLAB
-XX:+ResizeTLAB
-XX:+DisableExplicitGC
S3(MinIO)連携設定
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
spark.hadoop.fs.s3a.connection.maximum | 400 | 最大 S3 接続数 |
spark.hadoop.fs.s3a.threads.max | 128 | 最大 S3 スレッド数 |
spark.hadoop.fs.s3a.max.total.tasks | 1024 | 最大非同期ジョブ数 |
spark.hadoop.fs.s3a.fast.upload | true | 高速アップロード有効化 |
spark.hadoop.fs.s3a.fast.upload.buffer | disk | アップロードバッファタイプ |
spark.hadoop.fs.s3a.block.size | 128MB | S3 ブロックサイズ |
Iceberg 設定
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
spark.sql.iceberg.write.target-file-size-bytes | 256MB | ターゲットファイルサイズ |
spark.sql.iceberg.column-stats.enabled | true | カラム統計有効化 |
spark.sql.iceberg.vectorization.enabled | true | ベクトル化読み取り有効化 |
spark.sql.iceberg.manifest.merge.enabled | true | マニフェストマージ |
spark.sql.parquet.compression.codec | zstd | Parquet 圧縮コーデック |
Kafka チューニング
設定ファイル: plantpulse-messaging/kafka/config/server.properties
注意: Kafka はセンサーデータをリアルタイムで配信するメッセージブローカーです。データ量が増加する場合、Kafka 設定を調整して処理パフォーマンスを向上させることができます。
主要設定
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
num.network.threads | 3 | ネットワーク処理スレッド |
num.io.threads | 8 | I/O 処理スレッド |
socket.send.buffer.bytes | 102400 | ソケット送信バッファ |
socket.receive.buffer.bytes | 102400 | ソケット受信バッファ |
socket.request.max.bytes | 104857600 | 最大要求サイズ(100MB) |
num.partitions | 1 | デフォルトパーティション数 |
log.retention.hours | 168 | ログ保持期間(7 日) |
log.segment.bytes | 1073741824 | ログセグメントサイズ(1GB) |
大容量処理チューニング
大量の IoT データを処理する場合、以下の設定を参考にして調整してください:
# 파티션 수 증가 (메시지 병렬 처리)
num.partitions=4
# I/O 스레드 증가
num.io.threads=16
# 네트워크 스레드 증가
num.network.threads=8
# 소켓 버퍼 증가
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
メッセージング設定
設定ファイル: plantpulse-server/config/plantpulse-mq.properties
Kafka DDS トピック
| パラメータ | デフォルト値 | 用途 |
|---|---|---|
mq.dds.kafka.topic.tag.point | pp-tag-point | タグポイント値 |
mq.dds.kafka.topic.tag.alarm | pp-tag-alarm | タグアラーム |
mq.dds.kafka.topic.asset.data | pp-asset-data | アセットデータ |
mq.dds.kafka.topic.asset.alarm | pp-asset-alarm | アセットアラーム |
mq.dds.kafka.topic.asset.event | pp-asset-event | アセットイベント |
mq.dds.kafka.topic.asset.aggregation | pp-asset-aggregation | アセット集約 |
mq.dds.kafka.topic.domain.changed.event | pp-domain-changed-event | メタデータ変更 |
MQTT DDS トピック
| パラメータ | デフォルト値 | 用途 |
|---|---|---|
mq.dds.mqtt.topic.tag.point | tag/point/{tag_id} | タグ別ポイント値 |
mq.dds.mqtt.topic.tag.alarm | tag/alarm/{tag_id} | タグ別アラーム |
mq.dds.mqtt.topic.asset.data | asset/data/{asset_id} | アセット別データ |
mq.dds.mqtt.topic.asset.command | asset/command/{asset_id} | アセット制御コマンド |
スケジューラ設定
設定ファイル: quartz.properties(Web アプリ内部クラスパスリソース―外部化対象外)
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
org.quartz.threadPool.threadCount | 8 | スケジューラスレッド数 |
org.quartz.threadPool.threadPriority | 5 | スレッド優先度 |
メール / アラート設定
設定ファイル: plantpulse-server/config/plantpulse-mail.properties
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
mail.smtp.host | 192.168.0.41 | SMTP サーバーアドレス |
mail.smtp.port | 25 | SMTP ポート |
mail.smtp.auth | false | 認証使用の有無 |
mail.smtp.starttls.enable | false | TLS 使用の有無 |
アプリケーション設定
application.properties ファイルは 2026.06 で削除されました。テーマ / ホームページなどのコンソール動作設定はコンソールの システム > 設定管理(PostgreSQL mm_config テーブル)で管理され、alarm.duplicate.check.minutes(重複アラーム確認間隔、分)は plantpulse-server/config/plantpulse-engine.properties に移行されました。
パフォーマンスボトルネック診断
パフォーマンス問題が発生した場合、以下の症状別診断方法と解決策を参考にしてください。
1. パイプラインキュー詰まり
症状: パイプライン待機キューが持続的に増加しています
# Grafana 대시보드에서 "파이프라인 대기 큐" 패널을 확인해 주세요
# 또는 JMX: pipeline.queue.size 값을 확인해 주세요
解決策:
engine.pipeline.threads値を増やしてくださいengine.pipeline.ratelimit値を上向きに調整してください- Cassandra 書き込みパフォーマンスを確認してください
2. Cassandra 書き込み遅延
症状: 書き込みタイムアウトまたは WriteTimeoutException が発生しています
# 컴팩션 상태 확인
/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd node compactionstats
# Memtable 플러시
/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd node flush
解決策:
concurrent_writes値を増やしてくださいcompaction_throughput値を増やしてください- ディスク I/O パフォーマンスを確認してください(SSD の使用をお勧めします)
3. メモリ不足
症状: JVM GC が頻繁に発生するか、OutOfMemoryError が発生しています
解決策:
- サービスモジュールの
bin/start.shで-Xmx値を増やしてください engine.pipeline.queue.size値を減らしてメモリ使用を節約してください- 不要なキャッシュを無効化してください
4. ネットワーク遅延
症状: データ受信遅延が増加しています(Grafana「ネットワーク遅延」パネルで確認可能)
解決策:
- OPC サーバーと PlantPulse 間のネットワーク状態を確認してください
engine.streaming.messaging.timeout.ms値を調整してください- MQTT QoS レベルを確認してください
技術サポート
パフォーマンスチューニング関連のお問い合わせ: webmaster@kopens.com