メインコンテンツまでスキップ

パフォーマンスチューニング

概要

PlantPulse のパフォーマンスは、収集 → 処理 → 保存 の各レイヤーにおける最適化を順序立てて行うことで向上します。闇雲に全ての値を増加させるのではなく、監視指標を確認しながら ボトルネック箇所のみ を調整することが重要です。

チューニング原則 3つ

  1. 一度に1つのみ: 複数の変数を同時に変更すると、どの変更が効果をもたらしたかが不明になります。
  2. 運用データに基づく: ステージ環境で実際のトラフィックを再現してから変更してください。
  3. 記録を残す: 変更値および変更前後の指標を GitOps / 運用 wiki に記録してください。

運用環境別の推奨スタート値

環境CPUメモリディスク推奨 PIPELINE_THREADS推奨 PIPELINE_RATELIMIT
開発16 vCPU64 GBSSD1610,000 MPS
標準32 vCPU128 GBNVMe3640,000 MPS
大規模48+ vCPU200+ GBNVMe64100,000 MPS

env.sh ベースの主要チューニング変数

運用環境で最も頻繁に調整される変数は、ホストの bin/env.shcompose/docker-compose.yml で管理されます → 環境変数リファレンス

変数デフォルト影響
PP_CLUSTER_CORES30Spark / 分析コアの割り当て
PP_CLUSTER_MEMORY_BY_CORE2GSpark executor メモリ/コア
PP_LANG / PP_TZko / Asia/SeoulJVM ロケール / タイムゾーン
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.threads36パイプラインワーカースレッド数ホストのコア数の 70~80% を推奨します(検証環境 48 コア → 36)
engine.pipeline.ratelimit400001 秒あたりの最大処理メッセージ数(MPS)サーバー仕様に合わせて調整してください
engine.pipeline.queue.size1200000パイプラインキューの最大サイズメモリ余裕分に合わせて調整してください
engine.pipeline.queue.o3.delay50Out-of-Order 遅延処理( ms)ネットワーク遅延に応じて調整してください
engine.pipeline.task.modeSINGLEパイプラインタスクモードSINGLE または MULTI
engine.async.parallelism256非同期並列処理数CPU コア数の 8~16 倍を推奨します

ストリーミング設定

パラメータデフォルト値説明
engine.stream.processorDIRECTストリーム処理モード
engine.streaming.messaging.warning.ms5000メッセージ遅延警告基準( ms)
engine.streaming.messaging.timeout.ms10000メッセージタイムアウト( ms)
engine.streaming.messaging.timeout.store.typeFILE_QUEUEタイムアウトメッセージの保存方式
engine.streaming.messaging.timeout.recovery.typeDBタイムアウト復旧方式

ワークスレッド

パラメータデフォルト値説明
engine.job.thread.asset8アセットワークスレッド数
engine.job.thread.point8ポイントワークスレッド数

仕様別推奨設定

以下の表は、サーバー仕様に応じた推奨設定値です。運用環境の仕様に該当する列を参考にして設定してください。

項目小規模(8 コア / 64GB)中規模(16 コア / 128GB)大規模(32 コア / 256GB)
pipeline.threads163664
pipeline.ratelimit10,00040,000100,000
pipeline.queue.size300,0001,200,0003,000,000
async.parallelism64256512

Cassandra チューニング

設定ファイル: plantpulse-storage/db/cassandra/conf/cassandra.yaml

注意: Cassandra は時系列データを保存する主要なデータベースです。データ規模の増加に伴い、Cassandra チューニングが全体パフォーマンスに大きな影響を与えるため、運用環境に合わせた調整をお勧めします。

メモリ設定

パラメータデフォルト値説明
memtable_heap_space2GiBMemtable ヒープメモリ
memtable_offheap_space2GiBMemtable オフヒープメモリ
memtable_allocation_typeoffheap_objectsメモリ割り当てタイプ
memtable_flush_writers8Memtable フラッシュスレッド数

並行性設定

パラメータデフォルト値説明チューニングガイド
concurrent_reads256同時読み取りスレッドディスク数 × 16 を推奨します
concurrent_writes256同時書き込みスレッドCPU コア × 8 を推奨します
concurrent_counter_writes256同時カウンター書き込みconcurrent_writes と同じ値で設定してください
concurrent_compactors8同時圧縮スレッドCPU コア数の 1/4 を推奨します

コミットログ

パラメータデフォルト値説明
commitlog_syncperiodic同期方式
commitlog_sync_period10000ms同期周期
commitlog_segment_size320MiBセグメントサイズ
commitlog_total_space32GiBコミットログ全体空間

タイムアウト

パラメータデフォルト値説明
read_request_timeout10000ms読み取りタイムアウト
write_request_timeout60000ms書き込みタイムアウト
counter_write_request_timeout10000msカウンター書き込みタイムアウト
cas_contention_timeout1000msCAS 競合タイムアウト
truncate_request_timeout600000msTruncate タイムアウト

圧縮戦略

PlantPulse は時系列データの特性に適した UCS(Unified Compaction Strategy) を使用します。

注意: 圧縮(Compaction)は Cassandra がディスクに保存されたデータファイル(SSTable)を整理・統合する処理です。適切な圧縮戦略を使用することで、ディスク容量を節約し、読み取りパフォーマンスを向上させることができます。

storage.properties 設定:

パラメータデフォルト値説明
storage.table.compaction.strategyUCS圧縮戦略(UCS または TWCS
storage.table.compaction.strategy.ucs.scailing_parameterT8スケーリングパラメータ
storage.table.compaction.strategy.ucs.min_sstable_size128MiB最小 SSTable サイズ
storage.table.compaction.strategy.ucs.target_sstable_size512MiB目標 SSTable サイズ
storage.table.compaction.strategy.ucs.base_shard_count8ベースシャード数
storage.table.compaction.strategy.ucs.max_sstables_to_compact6最大圧縮 SSTable 数

圧縮

ZStandard 辞書圧縮を使用します:

パラメータデフォルト値説明
storage.compression.zstd.typeZstdDictionaryCompressor圧縮方式
storage.compression.zstd.level3圧縮レベル(1~22、高いほど圧縮率は上がりますが処理速度は低下します)

TTL(データ保存期間)

storage.properties でテーブル別の TTL を設定します。TTL を超過したデータは自動的に削除されるため、データ保存要件に合わせて設定してください。

パラメータデフォルト値説明
storage.tag.point.ttl62(日)タグポイント元データ
storage.tag.point.map.ttl1(日)タグポイントマップ
storage.tag.point.sampling.ttl93(日)サンプリングデータ
storage.tag.point.snapshot.ttl93(日)スナップショットデータ
storage.tag.point.aggregation.ttl93(日)集約データ
storage.tag.point.archive.ttl365(日)アーカイブデータ
storage.tag.blob.ttl93(日)BLOB データ
storage.asset.data.ttl10(日)アセットデータ
storage.asset.data.sampling.ttl31(日)アセットサンプリングデータ

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.max16Spark 最大使用コア数
spark.driver.cores2ドライバーコア数
spark.driver.memory4gドライバーメモリ
spark.executor.cores1Executor コア数
spark.executor.memory2GExecutor メモリ
spark.executor.memoryOverhead2gExecutor オーバーヘッドメモリ

動的割り当て

パラメータデフォルト値説明
spark.dynamicAllocation.enabledtrue動的 Executor 割り当て
spark.dynamicAllocation.minExecutors2最小 Executor 数
spark.dynamicAllocation.maxExecutors16最大 Executor 数
spark.dynamicAllocation.executorIdleTimeout30アイドル Executor 解放時間(秒)

シャッフルと並行度

パラメータデフォルト値説明
spark.default.parallelism64デフォルト並行度
spark.sql.shuffle.partitions128SQL シャッフルパーティション数
spark.sql.adaptive.enabledtrue適応的クエリ実行
spark.sql.adaptive.coalescePartitions.enabledtrueパーティション自動マージ

JVM 設定

Spark ドライバー/Executor は両方とも ZGC を使用します:

-XX:+UseZGC
-XX:+AlwaysPreTouch
-XX:+UseTLAB
-XX:+ResizeTLAB
-XX:+DisableExplicitGC

S3(MinIO)連携設定

パラメータデフォルト値説明
spark.hadoop.fs.s3a.connection.maximum400最大 S3 接続数
spark.hadoop.fs.s3a.threads.max128最大 S3 スレッド数
spark.hadoop.fs.s3a.max.total.tasks1024最大非同期ジョブ数
spark.hadoop.fs.s3a.fast.uploadtrue高速アップロード有効化
spark.hadoop.fs.s3a.fast.upload.bufferdiskアップロードバッファタイプ
spark.hadoop.fs.s3a.block.size128MBS3 ブロックサイズ

Iceberg 設定

パラメータデフォルト値説明
spark.sql.iceberg.write.target-file-size-bytes256MBターゲットファイルサイズ
spark.sql.iceberg.column-stats.enabledtrueカラム統計有効化
spark.sql.iceberg.vectorization.enabledtrueベクトル化読み取り有効化
spark.sql.iceberg.manifest.merge.enabledtrueマニフェストマージ
spark.sql.parquet.compression.codeczstdParquet 圧縮コーデック

Kafka チューニング

設定ファイル: plantpulse-messaging/kafka/config/server.properties

注意: Kafka はセンサーデータをリアルタイムで配信するメッセージブローカーです。データ量が増加する場合、Kafka 設定を調整して処理パフォーマンスを向上させることができます。

主要設定

パラメータデフォルト値説明
num.network.threads3ネットワーク処理スレッド
num.io.threads8I/O 処理スレッド
socket.send.buffer.bytes102400ソケット送信バッファ
socket.receive.buffer.bytes102400ソケット受信バッファ
socket.request.max.bytes104857600最大要求サイズ(100MB)
num.partitions1デフォルトパーティション数
log.retention.hours168ログ保持期間(7 日)
log.segment.bytes1073741824ログセグメントサイズ(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.pointpp-tag-pointタグポイント値
mq.dds.kafka.topic.tag.alarmpp-tag-alarmタグアラーム
mq.dds.kafka.topic.asset.datapp-asset-dataアセットデータ
mq.dds.kafka.topic.asset.alarmpp-asset-alarmアセットアラーム
mq.dds.kafka.topic.asset.eventpp-asset-eventアセットイベント
mq.dds.kafka.topic.asset.aggregationpp-asset-aggregationアセット集約
mq.dds.kafka.topic.domain.changed.eventpp-domain-changed-eventメタデータ変更

MQTT DDS トピック

パラメータデフォルト値用途
mq.dds.mqtt.topic.tag.pointtag/point/{tag_id}タグ別ポイント値
mq.dds.mqtt.topic.tag.alarmtag/alarm/{tag_id}タグ別アラーム
mq.dds.mqtt.topic.asset.dataasset/data/{asset_id}アセット別データ
mq.dds.mqtt.topic.asset.commandasset/command/{asset_id}アセット制御コマンド

スケジューラ設定

設定ファイル: quartz.properties(Web アプリ内部クラスパスリソース―外部化対象外)

パラメータデフォルト値説明
org.quartz.threadPool.threadCount8スケジューラスレッド数
org.quartz.threadPool.threadPriority5スレッド優先度

メール / アラート設定

設定ファイル: plantpulse-server/config/plantpulse-mail.properties

パラメータデフォルト値説明
mail.smtp.host192.168.0.41SMTP サーバーアドレス
mail.smtp.port25SMTP ポート
mail.smtp.authfalse認証使用の有無
mail.smtp.starttls.enablefalseTLS 使用の有無

アプリケーション設定

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