「ファイル連携」タグアーカイブ

HULFTの転送速度を理論値で算出する方法:単独転送と間欠転送で何が変わる?

HULFTで大容量ファイルを送信する際、
「単独転送と間欠転送では速度がどれくらい違うのか?」
と気になる場面は多いはずです。

特に、S3送信やネットワーク負荷対策で間欠転送を設定した場合、
「どれだけ転送時間が増えるのか?」を事前に把握しておきたいところです。

本記事では、HULFTの転送処理を理論値(数式)で算出する方法をわかりやすく解説します。


1. HULFT転送の基本:ブロック単位で送られる

HULFTはファイルをそのまま送るのではなく、
一定サイズ(ブロック長)に分割してブロック単位で送信します。

例えばブロック長を 16KB に設定している場合:

  • 1ブロック = 16KB

  • 1MBのファイルなら 1,048,576 ÷ 16,384 ≒ 64ブロック

という計算になります。

この「ブロック数 × ブロックあたりの処理時間」が転送時間に大きく影響します。


2. 単独転送の理論値:最速で送るシンプルな動作

単独転送(=間欠転送なし)は、
ブロックを休まず連続で送っていく動作です。

■ 単独転送の理論値計算式

転送時間(秒) ≒ ファイルサイズ ÷ 実効転送速度

※実効転送速度(Throughput)はネットワーク・HULFTヘッダなどのオーバーヘッドを含む実測値。

■ 例:500MBのファイルを100Mbpsで送信する場合

500MB = 4,000Mbit
4,000Mbit ÷ 100Mbps = 40秒

理論上は40秒となります。

実際にはHULFTヘッダ分のオーバーヘッドで数秒増える程度。


3. 間欠転送の理論値:休止時間の積み重ねで大幅に遅くなる

間欠転送は、各ブロック送信後に**休止時間(インターバル)**が入ります。

HULFTの設定例:

  • ブロック長:16KB

  • ブロック回数:100回

  • 休止時間:30ms

■ 間欠転送の理論計算式


ここが最も重要なポイント。

ブロックが多い場合、休止時間が膨れ上がります。


4. 実例:500MBファイルを間欠転送で送るとどうなる?

★ 前提

  • ブロック長:16KB

  • 500MB = 32,768ブロック

  • 単独転送時間:40秒(前述)

  • 休止時間:20ms

■ 間欠転送の追加時間

32,768ブロック × 0.02秒 = 655秒(約10分55秒)

■ 合計転送時間


→ 実際の現場でも「間欠転送は数倍遅くなる」理由はここにある

ブロック数 × 休止時間 → これが爆発的に効いてくるためです。


5. 実効転送速度(Throughput)の簡易算出方法

実測値を1回取るだけで、理論値がもっと正確になります。

■ 実測からの計算式

実効転送速度 = ファイルサイズ ÷ 転送時間

例えば

  • 100MBのファイル

  • 送信実測15秒
    → 実効速度 = 100MB ÷ 15 = 6.6MB/s(53Mbps)

これを単独転送の基準値にすることで、
間欠転送の予測精度が向上します。


6. 間欠転送の「適切な使いどころ」

間欠転送は遅くなるため万能ではありませんが、
以下の目的では効果的です。

  • S3/クラウド側で転送速度制限がある場合

  • 受信側の負荷分散が必要な場合

  • 夜間バッチでNW帯域を食いすぎるのを避けたい時

  • 他システムの処理性能に合わせたいケース

速度ではなく安定性や負荷分散を目的に使うのが本来の用途。


7. 間欠転送設定によるエラー(S3Timeout など)について

休止時間を入れると、
1ブロックあたりの処理が遅くなる → 全体が長くなる → タイムアウトに近づく
という問題があります。

特にS3送信では

  • S3Timeout(約60秒)

  • NW機器の制限

  • プロキシのタイムアウト

などに引っかかるケースが多い。

✔ 大容量ファイルほど間欠転送はリスクが高い

500MB・1GB級のファイルではブロック数が膨大になるため、
一気にタイムアウト領域に入ります。


まとめ

項目単独転送間欠転送
速度最速休止時間分だけ遅い
仕組みブロックを連続送信ブロック送信→休止の繰り返し
理論値算出単独転送時間のみ単独転送+(ブロック数×休止時間)
メリット最速で送れる負荷を抑え安定性を上げる
デメリット帯域を多く使う極端に遅く、タイムアウトを誘発

HULFT「間欠転送あり」と「なし」で何が変わる?S3送信で発生するエラーの原因と対策

💡 はじめに

HULFTでS3(クラウドストレージ)へファイルを送信する際、「間欠転送」という設定があります。
この機能は通信の安定化を目的としたものですが、実際には設定値によって転送が失敗したり、タイムアウトを引き起こすケースもあります。

この記事では、「間欠転送あり」と「間欠転送なし」で何がどう変わるのか、そしてS3送信でエラーが起こる原因と具体的な対策を整理します。


🔹 間欠転送とは?

間欠転送は、大きなファイルを一定サイズごとに区切って、間隔を空けながら送信する仕組みです。

通常転送が「連続的なデータストリーム」なのに対し、間欠転送は次のような動きになります。

<処理イメージ:転送間隔=20msの場合>

この「16KB」は、転送ブロック長(4KB)×ブロック数(4) の場合の動作例です。


🔹 通常転送との違い

項目通常転送(間欠なし)間欠転送(あり)
仕組みファイルを連続して送信小分けして間隔ごとに送信
メリット高速・設定不要通信の途切れを防げる(S3Timeout対策)
デメリット長時間通信で切断される可能性あり設定次第で速度低下・不安定化する
想定環境LAN・オンプレ間など安定回線WAN・VPN・S3などクラウド宛て

🔹 なぜS3で間欠転送が重要なのか

S3ストレージオプションは、HULFT内部で HTTP(S)通信 を使用しています。
この通信は、一定時間データの送受信が行われないと「タイムアウト扱い」となり、セッションが切断されます。

そのため、定期的に通信を行う間欠転送を使うことで、S3側が「接続が生きている」と判断しやすくなり、転送が安定します。


⚠ S3送信でエラーになる原因

間欠転送なしで送信してエラーになる場合、間欠転送にすることでエラー解消する場合もあります。

ところが、実際には「間欠転送をONにしたら逆に転送が失敗した」という報告も少なくありません。
主な原因は以下の通りです。

原因内容対応策
① 設定値が極端(間隔0msやブロック1など)通信制御が細かすぎて不安定になるブロック長4KB/ブロック数4/間隔20〜30msへ修正
② S3Timeoutが短いデフォルトの60秒では間欠の待機中に切断されるhulft_s3.confに S3Timeout=120 以上を設定
③ 送信側と受信側の間欠設定が不一致双方で動作パターンが異なりセッションが破綻同一設定で統一する
④ ファイルサイズと設定バランスが悪い大容量(数百MB)で間隔が長いと時間切れ間隔を短く・ブロックを大きく調整
⑤ ウイルス対策やVPN干渉小刻み通信が検査対象になり応答が遅延除外設定または専用ポート経由に変更

🧭 S3送信における安定化の推奨設定

設定項目推奨値解説
転送ブロック長4096 bytes(4KB)標準的でメモリ効率が良い
転送ブロック数416KB単位で通信制御が安定
転送間隔20〜30ms応答を維持しながら速度低下を抑制
S3Timeout120〜180秒デフォルト60秒では短すぎる
終了コード(RC)RC=0が正常、RC=8以上は異常メッセージではなくRCで結果を判定

この設定であれば、150〜350MBクラスのファイルを3〜9分程度で安定して送信できます。


🧱 間欠転送が逆効果になるケース

LAN内やオンプレ同士など、もともと通信が安定している環境では、間欠転送を入れることで逆にCPU待ちや余計な遅延を生むことがあります。
そのため、以下のように使い分けるのがベストです。

環境推奨設定
社内LAN・閉域網間欠転送なし(高速重視)
S3・WAN・VPN間欠転送あり(安定性重視)

🧩 トラブルシューティングの手順

  1. 間欠転送をOFFに戻して再送信
     → 正常に送信できるか確認して比較ベースを作る。

  2. ONにした状態でログを確認
     → 通信エラー・再送メッセージなどを確認。

  3. 設定を微調整(間隔20→30msなど)
     → エラー頻度が下がるかを検証。

  4. S3Timeoutを延長
     → hulft_s3.confS3Timeout=180 を追記。

  5. VPN・FW・ウイルス対策干渉をチェック
     → 小刻み通信の検査を除外する設定を追加。


🧠 まとめ

  • 間欠転送は「S3など不安定回線向けの安定化機能」。

  • ただし設定値を誤ると、通常転送より不安定になる。

  • 4KB×4ブロック・20〜30ms間隔・S3Timeout120秒以上が実運用で最も安定。

  • ジョブの成否は**終了コード(RC)**で判定し、メッセージ内容は原因分析に利用する。

HULFTで日付付きファイルを配信元ファイル名のまま受信する方法

HULFTを使ったファイル連携では、バッチ処理などで日付が付与されたファイル名を扱うケースが多くあります。
例えば、送信側で以下のように日付が付与されたファイルを生成する場合です。

sales_20250911.csv
sales_20250912.csv

受信側でもこのファイル名をそのまま維持して保存したい、という要件はよくあります。
本記事では、その場合に利用できる HULFTの動的パラメータ $SNDFILE を使った方法を解説します。

$SNDFILEとは?

HULFTには送受信時に利用できる動的パラメータが用意されています。
その中の一つが $SNDFILE で、これは 「送信元ファイル名」 を表します。

つまり $SNDFILE を指定することで、送信側が持つ実際のファイル名を受信側でそのまま利用することが可能です。


設定例

受信側(集信定義)の「受信ファイル名」に $SNDFILE を指定します。

C:\recv\$SNDFILE

この設定を行うと、送信されたファイル名のまま受信先に保存することが出来ます。

例:送信元のファイルが sales_20250911.csv の場合

  • 配信元: /data/sales_20250911.csv

  • 受信定義: C:\recv\$SNDFILE

  • 保存結果: C:\recv\sales_20250911.csv


利用上の注意点

  • 受信先でファイル名を固定して指定すると上書きされる
    例えば C:\recv\sales.csv のように固定名を指定した場合、複数ファイルを送信すると最後のファイルで上書きされてしまいます。
    $SNDFILE を使うことで、送信元ファイルごとに別々のファイルとして受信できます。

  • 動的パラメータが有効になっている必要がある
    $SNDFILE はHULFTの動的パラメータ機能を利用するため、システム環境設定で動的パラメータが有効化されていることを確認してください。

  • ディレクトリは固定、ファイル名だけ動的
    C:\recv\ 部分は固定ですが、ファイル名部分に $SNDFILE を置くことで柔軟に対応可能です。


まとめ

  • $SNDFILE を使うことで、送信元のファイル名をそのまま受信側に引き継げる。

  • 日付付きファイルや動的に生成されるファイル名を扱う場合に便利。

  • 受信定義に C:\recv\$SNDFILE のように設定するだけで利用可能。

HULFTの運用では「配信元のファイル名をそのまま使いたい」という要件は多いため、覚えておくと便利なテクニックです。