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

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

概要​

PlantPulseのパフォーマンスは、収集 → 処理 → 保存 の各レイヤーのボトルネックを順に取り除くことで向上します。無条件にすべての値を大きくするのではなく、モニタリング指標を確認し、ボトルネック箇所のみを調整することが重要です。

チューニングの3原則

  1. 一度に1つだけ: 同時に複数の変数を変更すると、どの変更が効果をもたらしたか分かりません。
  2. 運用データに基づく: stage環境で実際のトラフィックを再現してから変更します。
  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.sh と compose/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.ratelimit40000秒あたり最大処理メッセージ数 (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

Aster TSDBチューニング​

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

案内: Aster TSDBは時系列データを保存する中核データベースです。データ規模が大きくなるほどAster TSDBのチューニングが全体のパフォーマンスに大きな影響を与えるため、運用環境に合わせて調整することをお勧めします。

メモリ設定​

パラメータデフォルト値説明
memtable_heap_space2GiBMemtableヒープメモリ
memtable_offheap_space2GiBMemtable Off-Heapメモリ
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)は、Aster TSDBがディスクに保存されたデータファイル(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 (日)アセットサンプリングデータ

Aster TSDBパフォーマンス点検コマンド​

以下のコマンドを使用してAster TSDBのパフォーマンス状態を点検できます:

# 컴팩션 상태 확인
/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.enabledtrueAdaptive Query Execution
spark.sql.adaptive.coalescePartitions.enabledtrueパーティション自動マージ

JVM設定​

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

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

S3 (RustFS)連携設定​

パラメータデフォルト値説明
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 (ウェブアプリ内部クラスパスリソース — 外部化対象外)

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

メール / 通知設定​

設定場所: PostgreSQL pp.mm_config テーブルです。2026-09-17 に plantpulse-mail.properties を削除し、外部confに残っていた古いコピーを読み取るパスも2026-09-18に削除しました — 値はコンソールまたは pp.mm_config からのみ入力されます。 キー名とデフォルト値はそのままです。

パラメータデフォルト値説明
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. パイプラインキュー滞留​

症状: パイプライン待機キューが継続的に増加します

# PlantPulse Dashboard 에서 "파이프라인 대기 큐" 패널을 확인해 주세요
# 또는 JMX: pipeline.queue.size 값을 확인해 주세요

解決:

  • engine.pipeline.threads の値を増やしてください
  • engine.pipeline.ratelimit の値を引き上げてください
  • Aster TSDBの書き込みパフォーマンスを確認してください

2. Aster TSDB書き込み遅延​

症状: 書き込みタイムアウトまたは 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. ネットワーク遅延​

症状: データ受信遅延が増加します (PlantPulse Dashboard "ネットワーク遅延"パネルで確認可能)

解決:

  • OPCサーバーとPlantPulse間のネットワーク状態を確認してください
  • engine.streaming.messaging.timeout.ms の値を調整してください
  • MQTT QoSレベルを確認してください

テクニカルサポート​

パフォーマンスチューニングに関するお問い合わせ: webmaster@kopens.com