• ベストアンサー

サーバにかかる負荷はどんなもの?

PDFをサーバにアップ。    ↓ 送信リスト(csv)をアップ。    ↓ 送信開始ボタンを押すと「メール送信×リスト行数(繰り返し)」 といったプログラムを作りました。 プログラム自体は問題無く動くようになりましたが、 サーバへの負荷がどれくらいかかるのか心配になりました。 4MBの添付ファイルを付けて1通メールを送信したところ、 約8秒で送信完了しました。 上記と同じ様なメールを10通まとめて送信したところ、 約75秒で送信完了しました。 元々、依頼者から150通のメールを送るのに「150回同じ作業を繰り返さない事」が目的で制作したものなのですが、150通一気に送ったらサーバにどれほどの負荷がかかるのでしょう? 単純計算でいくと、150通送信完了するのに20分くらいかかりますよね?大丈夫でしょうか…??

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

> 調べるためのキーワードがわからず自分で検索できなかったので、 「マルチスレッド」でいいと思います。 単にforやforeach(whileでもいいですが)だけですと、 そのループが終わるまでCPU(コンピューター)を占有し続けます。 ですが、そのループの中に、「一定時間、このループ(アプリケーション)を止めて、ほかに必要な処理があればそれを行う」という命令が書いてあれば、その処理を行い、 その後で、またこのループの続きを行うようになります。 そのため、「他の人がメールを送りたい」という接続してきた場合は、サーバーにとっては「他に必要な処理」とみなしますから、150通終わらなくても他の人もメールを送ることが出来ます。 マルチスレッドの実装方法、関数名などは、OSや言語によって違います。 >>1回だけならメーラーでBCCで >メール本文は同一でも、添付ファイルが異なる…といった場合でもBCCで可能なんでしょうか? う~ん、、、これはメーラーやメーリングリストのシステムでは無理かも。。。 はずかしながら、forだけの単純なループで、1kb x 1000通でメールサーバー(テストサーバーですが)を止めた経験もあります(^^;

TMEspion
質問者

お礼

アドバイスありがとうございます。 >マルチスレッド ありがとうございます。 この単語がわかってかなり助かりました。

その他の回答 (5)

  • maura
  • ベストアンサー率46% (48/104)
回答No.6

メールを送信する時の動作は、 1.メールサーバーに接続する 2.メールを送信する 3.接続を切る これを非効率に繰り返しているので遅いのです 接続、切断は、コストがかかりますので 1~3を10回繰り返すのではなく 1をやって 2を10回繰り返して 3で終了する プログラムにするべきです

TMEspion
質問者

お礼

アドバイスありがとうございます。 心配事の正体がわかったので質問を締め切ります。 回答及びアドバイスをして下さった皆様、 ありがとうございました。

回答No.4

送信する側のメールサーバーが自社管理ならそれでいいと思いますが、 受信する側のメールサーバーへの負担も考える必要があるのでは? 150人とはいえ、1回だけならメーラーでBCCで送った方がいいでしょうけど、 そうではなく、わざわざプログラムを作るくらいですから、おそらく何度も送ることになると思います。 4MB~10MB近いメールを常時受信するような状態になるなら、受信する方の負担も結構な量になると思うのですが、どうでしょうか。 通常は、ANo.2の通り、 メールに添付して送るのではなく、ウェブサーバーやFTPサーバーにアップロードして、 メールでアップロードしたことを伝えるだけ、ということをします。 単純計算で20分でも、作り方次第でフリーズする可能性もあります(永久に送信出来ません) for(i=0;i<150;i++){ 送信処理 } まさかとは思いますが、上のような書き方だったらたぶんフリーズします。 厳密にはフリーズやハングではないと思いますが、送信完了まで他の処理が出来なくなります。 たとえば他の人がメールを送信しようとしても、150通送信完了しなければサーバーに接続出来ないなど。 すでに出ていますが、 既存のメーリングリストのシステムを使うのがいいと思います。 一般的なメーリングリストで10MB近い添付ファイルを150人に送れば、アカウント停止が見えてますので、 FMLなど、メーリングリストのシステムを自社サーバーで使うのがいいと思います。 送信完了まで1~2時間以上かかるかも知れませんが、メール送信中にも他の仕事をさせることが出来ますから、自社サーバーで作るならメール送信の負荷はそこまで気にしなくていいと思います。 「メーリングリスト」「メールマガジン」など、それらしい言葉で検索すると適したソフトウェアが見つかると思います。

TMEspion
質問者

補足

アドバイスありがとうございます。 >1回だけならメーラーでBCCで メール本文は同一でも、添付ファイルが異なる…といった場合でもBCCで可能なんでしょうか?メーラーによるのであれば、何ならできますか? >メールを常時受信するような状態になるなら 定期的に送信を行うという話ではないので、おそらく無いと思います。 >まさかとは思いますが 誠にお恥ずかしい話ですが、その「まさか」なのです。 厳密には「foreach」だというのはたぶん、些細な差です。 私の危惧していたのは、その「まさか」だったみたいです。 そうならないようにしたくて対処法を調べたくとも ハング?やそうならないための処理の呼称だとか、 調べるためのキーワードがわからず自分で検索できなかったので、 こういった質問をしました。 「まさか」の方法以外で、そういった心配が無くなる処理の方法を知りたい場合はどう調べたら良いですか? >既存のメーリングリストのシステムを 探してみてはいるんですが、なかなか条件に合ったものが見つかりませんね。もう少し探してみます。

回答No.3

>プログラムはインターネットに公開している自社サーバ上にあります。 ということはメールサーバも業者のネットワーク中にあるでしょうから、そんなに気にしなくてもいいように思います。 5MBを20分で流すと、単純計算で5Mbpsですから。 出来ればトラフィックの少ない明け方に送るとか出来ればベターかも。 顧客要求的に可能なら、ANo.2さんの方法もいいと思います。 サーバの負荷はプログラム次第なのでなんともいえません。動作中にtopで見ればある程度は把握できるでしょう。 メールサーバはCPU的な負荷は、おそらくそれほど高くありません。 ちなみに以前メール配信業をやっていたときは、数十万通配信で数時間動きっぱなし、など普通にやってました。

TMEspion
質問者

補足

アドバイスありがとうございます。 >出来ればトラフィックの少ない明け方に それはメール配信システム等を導入したとしても同じ事が言えるのでしょうか? >サーバの負荷はプログラム次第なので 「動作中にtopで見れば」とありますが、「top」とはなんですか? >数十万通配信で数時間動きっぱなし、など普通にやってました。 心強い意見ありがとうございました。

回答No.2

PDFをベーシック認証した場所にアップ ID,パスワードとURLを送る。 って考えないのは? >4MBの添付ファイルを って受けると側からしたら迷惑な容量ですよ。 >依頼者から150通のメールを送るのに「150回同じ作業を繰り返さない事」が目的で制作したものなのですが、 手作業でって事ですよね? だったらわざわざ新しく作らなくて 既存のメール配信システムを導入すれば良いことでは?

TMEspion
質問者

お礼

アドバイスありがとうございます。 質問内容に対して的外れな感じがややありますが、 まだ方法を選び直す時間があると思うので依頼主と相談してみます。 >既存のメール配信システムを導入すれば良いことでは? できれば既存のメール配信システムを紹介していただけませんか?

TMEspion
質問者

補足

依頼主と相談してみたところ、 まだ方法を変更しても問題無いそうなので、 URLを送る方に切り替えて考えてみようと思います。

回答No.1

心配されているのは、cgiが動くサーバ? それともメールサーバ? 150通のメール送信くらいならどちらもそれほど問題ないと思います。それよりトラフィックのほうが心配です。 PDFはどのくらいの容量ですか? 各サーバはどんなネットワークで繋がっていて、誰が管理しているものですか?

TMEspion
質問者

補足

補足です。 >cgiが動くサーバ? それともメールサーバ? どっちか自分でもよくわからないのですが、 それぞれ問題があるとすればどんな問題がありそうですか? >トラフィック トラフィックとは通信路や網全体に流れるデータの量を表す。何らかの手段でトラフィックを制御することができれば、安定した通信ネットワークを構築できる。 網は何らかの理由で制限されている有限な転送容量を持ち、網の能力以上のデータを網に流すことはできない。能力を超えたトラフィックが発生すると、通信が不安定になったり不能となる。(はてなダイアリー) という事ですが、 送るこちら側の環境が高くて送れたとしても、受信側の環境では受け取る事ができない場合がある。という事なのでしょうか? >PDFの容量 実際に送るPDFがまだ用意できている訳ではないのではっきりとした事は書けないのですが、「1通あたり5MB程度。どんなに大きくても10MB未満」という事です。 >どんなネットワーク、誰が管理 プログラムはインターネットに公開している自社サーバ上にあります。 管理者は私ではないですが、担当の社員が居ます。 こちらの返答が要求に応えられているか自信無いです。

関連するQ&A

専門家に質問してみよう