信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    Amazon Athena で快適なデータ分析ライフを!

    皆さん、AWS使ってますか? 今回は 「Amazon Athena」 を紹介したいと思います! ざっくり言うと、 「S3にある様々なフォーマットのデータを標準的なSQLで分析できるサービス」 です。 まず何が良いか?って言うと、  ・サーバレスなので、インフラ管理が不要 ・標準SQLなので、学習コストが低い ・読み込みしたデータ容量で課金なので、費用が超安い ・事前のデータ加工が不要で、すぐ使い始められる ・クエリが並列処理されるので、レスポンスが高速 あたりです。 現在では米国のリージョンしか利用できないですが、分析したデータが入っているS3バケットが他リージョンでも設定可能な為に全く問題なく使えます。 当社ではサイトのアクセスログを分析するのに、  Apache の生ログと格闘     ↓ SumoLogic で独自クエリ投げて分析     ↓ Amazon Elasticsearch Service と Kibana で代替     ↓ Amazon Athena での自動化を検証中 ★今ココ! という経緯を辿っています。 今後、ログ的なものは全てS3にとにかく突っ込んでおいて、必要な情報だけ後で取り出す・・・という流れが加速しそうです。 様々なユースケースに対応できるサービスかと思いますので、皆さん是非とも使ってみて下さい!
  • テクログ

    ラズパイでVPNアクセスルータを作ってみた

    はい!ムチャぶりおにぃです。とある案件にてVPNアクセスルータが必要になった為、普通に売っているブロードバンドルータではなく技術会社っぽくLinuxを使ってVPNアクセスルータを作ってみた。案件に必要最低限の設定のみしています。といいつつ、先人たちのお知恵を存分に拝借しています。 (1)~機材集め~まず、機材選定をする段階で、Linuxが動くことが前提になったが今となるとどんな機器でも動くので、コストを抑えるためにRaspberry Piを選んでみました。Raspberry Piにもいろいろなバージョンがあり、【Raspberry Pi 3 Model B】で搭載されている無線LANは今回不要なので、あえて【Raspberry Pi 2 Model B】(ラズパイ2)を選択。あと、動かすためのmicroSD(後述のOSイメージが3Gあるので4GB以上を用意)・スマホの充電器・ケースを購入。全部で9千円いかないぐらい(安いね)。 (2)~OS選択~ラズパイで利用できるLinux・Raspbian(Debianベース)・Pidora(Fedoraベース)・Arch Linux・CentOS 7とあり、去年の3月ぐらいから利用できるようになった【CentOS 7】を選択しました。弊社のシステム基盤としては、CentOSをベースとして使っていますので。 (3)~OSインストール~CentOSのオフィシャルサイトからラズパイ2用のイメージファイルをダウンロードして、microSDに書き込みます。ダウンロード先:https://wiki.centos.org/Download └ RaspberryPi2 (img) microSDに書き込むツールは、シリコンリナックス社様が公開している【DD for Windows】を利用しています。ダウンロード先:http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows └ Ver.0.9.9.8【DD for Windows】の使い方は、検索して調べてね。Windows10で作業していますが、「管理者として実行」で実行しないと利用できませんでした。Windows7以降必須らいしいです。 (4)~初期設定~CentOSを書き込んだmicroSDをラズパイ2に差し込んで起動します。この時、minimalでインストールされた状態のCentOSが起動しますので、ログイン画面が表示されたらroot/centosでログインします。とりあえず、LANケーブルを刺せばDHCPでIPが取得できるので、アップデートだったりパッケージのインストールは可能です。ということで、以下の流れで設定しています・・・◆操作しやすいようにコンソールログインをして、ifconfigをしましょう。# ifconfig・インターフェースのIPアドレスをWindows/MacからSSHで接続しましょう。◆microSDをすべて利用できるようにパーティションの拡張# fdisk /dev/mmcblk0・パーティション領域確認します。「p」・拡張するパーティション(最後のパーテ)を一度削除する。「d」「3」・再度パーティション領域を設定する。「n」「p」「入力せずENTER」「入力せずENTER」※First sector/Last sectorは自動で入力されます。・パーティション領域を保存します。「w」# shutdown -r now・変更したパーティションを反映させる# resize2fs /dev/mmcblk0p3・パーティション領域を実際に使えるよう拡張する◆キーボード・タイムゾーンの設定# localectl set-keymap jp# timedatectl set-timezone Asia/Tokyo◆ログインユーザー追加(wheel追加)・公開鍵を作成# adduser hogehoge# usermod -G wheel hogehoge# passwd hogehoge・コンソールでログインするためにパスワードを設定。# su - hogehoge・作成したユーザーにスイッチ。$ mkdir -m 700 ~/.ssh$ ssh-keygen -q -N "" -f ~/.ssh/id_rsa$ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys$ chmod 600 ~/.ssh/authorized_keys$ cat ~/.ssh/id_rsa・リモート元に転記。$ exit◆sshログインを公開鍵方式に設定変更# sed -i -e "/^root/a\hogehoge ALL=(ALL) NOPASSWD:ALL" /etc/sudoers# sed -i -e 's/^%wheel/# %wheel/g' /etc/sudoers# sed -i -e '/#PermitRootLogin/a\PermitRootLogin no' /etc/ssh/sshd_config# sed -i -e 's/^PasswordAuthentication yes/#PasswordAuthentication no/g' /etc/ssh/sshd_config# service sshd restart・ログインチェック(rootログインできないこと・作成したユーザーで鍵ログインできること)◆rootパスワード削除# sed -i -e 's/^root/#root/g' /etc/shadow# sed -i -e '/root/a\root:*LOCK*:14600::::::' /etc/shadow# sed -i -e '/#root/d' /etc/shadow◆CTRL+ALT+DELETEを無効化# ln -s /dev/null /etc/systemd/system/ctrl-alt-del.target◆IPv6を無効化# cat << EOL > /etc/sysctl.d/disable_ipv6.confnet.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1EOL# sysctl -p /etc/sysctl.d/disable_ipv6.conf◆irqbalanceバグ# cat << EOF > /etc/cron.daily/irqbalance#!/bin/sh/bin/systemctl restart irqbalance.serviceEOF◆キャッシュクリア・パッケージアップデート# yum clean all# yum -y update◆基本パッケージをインストール# yum -y install chrony ntpdate perl bind-utils iptables-services wget# yum -y groupinstall "Development Tools"◆フィルタリングソフトをiptablesに変更# systemctl stop firewalld# systemctl disable firewalld# mv /etc/sysconfig/iptables /etc/sysconfig/iptables.orig# cat << EOL > /etc/sysconfig/iptables*filter:INPUT DROP [0:0]:FORWARD DROP [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -m state --state INVALID -j DROP-A INPUT -p tcp -m tcp --sport 80 --dport 80 -j DROP-A INPUT -i lo -j ACCEPT-A INPUT -s 事務所の固定IP/32 -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -j DROPCOMMITEOL# systemctl enable iptables# systemctl start iptables◆時刻設定# sed -i -e 's/0.centos.pool.ntp.org/ntp.nict.jp/g' /etc/chrony.conf# sed -i -e 's/1.centos.pool.ntp.org/ntp1.jst.mfeed.ad.jp/g' /etc/chrony.conf# sed -i -e 's/2.centos.pool.ntp.org/ntp2.jst.mfeed.ad.jp/g' /etc/chrony.conf# sed -i -e 's/3.centos.pool.ntp.org/ntp3.jst.mfeed.ad.jp/g' /etc/chrony.conf# ntpdate ntp.nict.jp# systemctl start chronyd# systemctl enable chronyd (5)~ルータ設定~初期設定が完了したらルータにすべく以下の流れで設定しています・・・設定が終わり再起動するタイミングでLANケーブルをONU(光回線終端装置)とつなぎ替えます。◆パッケージインストール# yum -y install rp-pppoe ppp-devel◆PPPoE設定# pppoe-setup・出てくる質問に答えて設定をしていく。Enter your Login Name:ISPの接続IDを入力Enter the Ethernet interface:LANケーブルを刺すインターフェイス名を入力Enter the demand value:常時接続なので「no」Enter the DNS information here:ネームサーバーを固定するので「8.8.8.8」Enter the secondary DNS server address here:ネームサーバーを固定するので「8.8.4.4」Please enter your Password:ISPの接続パスワードnormal user to start or stop DSL connection:rootユーザー以外操作させないので「no」Choose a type of firewall:ルータとして利用するので「2」Please enter no or yes:起動時に有効かするので「yes」※入力確認が表示されたら「y」で保存◆インターフェイス設定・pppoeで使うインターフェースのプライベートIPを固定する# cp /etc/sysconfig/network-scripts/ifcfg-eth0.bak /etc/sysconfig/network-scripts/ifcfg-eth0# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak# nmcli c modify eth0 ipv4.addresses "10.10.10.254/24"# nmcli c modify eth0 +ipv4.dns 8.8.8.8# nmcli c modify eth0 ipv4.method manual# nmcli c modify eth0 ipv4.gateway "10.10.10.254"# nmcli c modify eth0 ipv4.never-default yes◆SELinuxを無効化するsed -i -e 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config◆起動時にpppoe接続できない対応・/etc/sysconfig/networkのファイルがないとpppoe接続ができないtouch /etc/sysconfig/network◆再起動してルータになっているかテストをする# shutdown -r now・設定不備がなければpppoe接続できていてログイン画面になる (6)~VPN設定~VPNにも、IPsec, L2TP/IPsec, PPTP, IPIP, L2TPv3と多種多様の方式があります。今回は、セキュリティーレベルを考えると【L2TP/IPsec】なのですが、通信速度が遅くなるので【pptp】を選択しました。ということで、VPN設定についても以下の流れで設定しています・・・◆パッケージインストール・yumでインストールできないのでソースインストールになります。# cd /usr/local/src# wget https://jaist.dl.sourceforge.net/project/poptop/pptpd/pptpd-1.4.0/pptpd-1.4.0.tar.gz# tar xvzf pptpd-1.4.0.tar.gz# cd pptpd-1.4.0# ./configure --prefix=/usr# make# make install# cp samples/pptpd.conf /etc/# cp samples/options.pptpd /etc/ppp/・conf設定# cp /etc/pptpd.conf /etc/pptpd.conf.orig# echo "localip 10.10.10.254" >> /etc/pptpd.conf# echo "remoteip 10.10.10.11-30" >> /etc/pptpd.conf# cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.orig# sed -i -e '/ms-dns 10.0.0.2/a\ms-dns 8.8.4.4' /etc/ppp/options.pptpd# sed -i -e '/ms-dns 10.0.0.2/a\ms-dns 8.8.8.8' /etc/ppp/options.pptpd# echo "#" >> /etc/ppp/options.pptpd# echo "mtu 1200" >> /etc/ppp/options.pptpd# echo "mru 1200" >> /etc/ppp/options.pptpd・pptp認証ユーザー設定# cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.orig# echo 'hogeuser pptpd "hogepass" *' >> /etc/ppp/chap-secrets・パケット転送をできるように設定# sed -i -e '/net.ipv4.ip_forward/d' /etc/sysctl.conf# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf# sysctl -p・pptpd起動スクリプト設定と自動起動設定# cat << EOL > /etc/init.d/pptpd#!/bin/sh## Startup script for pptpd## chkconfig: - 85 15# description: PPTP server# processname: pptpd# config: /etc/pptpd.conf# Source function library.. /etc/rc.d/init.d/functions# See how we were called.case "\$1" in start)    echo -n "Starting pptpd: "    /sbin/modprobe nf_conntrack_proto_gre    /sbin/modprobe nf_conntrack_pptp    if [ -f /var/lock/subsys/pptpd ] ; then        echo        exit 1    fi    daemon /usr/sbin/pptpd    echo    touch /var/lock/subsys/pptpd    ;; stop)    echo -n "Shutting down pptpd: "    killproc pptpd    echo    rm -f /var/lock/subsys/pptpd    ;; status)    status pptpd ;; condrestart)    if [ -f /var/lock/subsys/pptpd ]; then        \$0 stop        \$0 start    fi    ;; reload|restart)    \$0 stop    \$0 start    echo "Warning: a pptpd restart does not terminate existing "    echo "connections, so new connections may be assigned the same IP "    echo "address and cause unexpected results. Use restart-kill to "    echo "destroy existing connections during a restart."    ;; restart-kill)    \$0 stop    ps -ef | grep pptpd | grep -v grep | grep -v rc.d | awk '{print \$2}' | uniq | xargs kill 1> /dev/null 2>&1    \$0 start    ;; *)    echo "Usage: \$0 {start|stop|restart|restart-kill|status}"    exit 1esacexit 0EOL# chmod +x /etc/init.d/pptpd# chkconfig pptpd on# /etc/init.d/pptpd start・iptablesにpptpdとパケット転送の許可設定を追加# sed -i '/icmp/a\-A INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT' /etc/sysconfig/iptables# sed -i '/icmp/a\-A INPUT -p gre -j ACCEPT' /etc/sysconfig/iptables# sed -i '/-A INPUT -j DROP/a\-A FORWARD -o ppp+ -j ACCEPT' /etc/sysconfig/iptables# cat << EOL >> /etc/sysconfig/iptables*nat:PREROUTING ACCEPT [0:0]:INPUT ACCEPT [0:0]:OUTPUT ACCEPT [0:0]:POSTROUTING ACCEPT [0:0]-A POSTROUTING -o ppp+ -j MASQUERADECOMMITEOL# service iptables restart (7)~クライアント設定~WindowsだったりLinuxだったりにpptp認証ユーザー設定で登録したID/PWを使って設定をしてVPN接続しVPNアクセスルータ経由で外部にアクセスできれば設定完了!!あとどのように運用するかは貴方次第!・固定IPのプロバイダを使ってない場合・・・ラズパイを再起動するとIP変わっちゃうよ!なので何かしらの方法でIPを確認する方法を実装しないとです。。。・pppoe接続タイミングの兼ね合いでiptablesがうまく適応できないことがわかっています。現在は/etc/rc.localなどで調整をしています。 そんな感じで設定は完了です。では。
  • テクログ

    AWS Certificate Manager (ACM) について

    皆さん、AWS使ってますか? 今回よりマスオさんはAWSを中心とした話題を書いていきたいと思います! 第一弾となる今回は満を持してAWSがサービス開始した AWS Certificate Manager (ACM) を紹介したいと存じます。 ざっくり言うと、 「AWS サービスで使用する SSL/TLS 証明書の管理を行えるマネージドサービス」 です。 昨年5月から東京リージョンで提供開始されており、当社でも利用範囲が絶賛拡大中となっています。 AWSのサービス(ELB/CloudFront)を使っていないと適用できなかったり、EV証明書が選択できなかったり等の制限はありますが、逆に制限が問題なければ(AWS使っていてEVじゃなくても良い)、超便利なサービスとなります。 主には・・・  ・無料(やはり重要!) ・簡単(基本クリックだけ!) ・自動更新(ただし、条件あり!) など今までの運用における常識を覆すサービスと言っても過言ではありません。 HTTPからHTTPSにすると検索ランキングが向上するとAWS自ら公言しているほどSEOに良い影響を与えると考えられている事から相次ぎ導入するサイトが増えているようです。 ユーザーの通信手段はサービス運営側で選べませんが、SSL化によってサービス運営側で信頼性を主体的に高める事はできるので、プログラム修正など必要になる事を考慮しても間違いなく導入した方が良いですよね~。 もう全世界、全サービスで暗号化を推進していこうぜ!って感じです。 皆さん是非とも使ってみて下さい!
  • テクログ

    PHPとElasticTranscoder

    PHPとElasticTranscoder 皆さんこんにちわ。 ni-yoです。 本日も技術ネタを少々… 弊社はサーバの主流はAWSになっています。 構築の手間と冗長性等を考慮するとオンプレより多方面でメリットが大きく 手放せない存在になっています。 本日はそんな機能の1つElasticTranscoderの紹介をさせていただきます。 Webの世界もクラウド技術の発達等により昔は制限があって実装できないような コンテンツを実現できるようになってきました。 Webの世界もここ近年動画コンテンツの実装率が日々あがってきていることを感じます。 とはいえ、Webでの動画実装はそれほど簡単ではありません。 動画には画像よりもずっと多くの規格があり、(mp4/avi/wmv/flv等) 反面Webブラウザで再生できる規格にはある程度制限があります。 例えばYoutubeのようにユーザ投稿型のコンテンツを作ろうという場合、 ある程度ブラウザで再生できる規格に変換する必要性があります。 この作業をエンコードと言い、動画変換作業の中でデジタル映像をアナログ信号に デコードしないでエンコードを行う作業をトランスコードと言います。 今回紹介するElasticTranscoderはこのトランスコードの作業をAWSでできる技術です。 今回はWebで考えるのでPHPからElasticTranscoderへジョブ通知することにスポットし、 ElasticTranscoder自体は詳しく掘り下げません。 ざっと手順を言えば ①トランスコード元ファイルを配置するS3フォルダを作成 ②トランスコード済みファイルを配置するS3フォルダを作成 ③ElasticTranscoderの入力を①、出力を②で指定したパイプラインを作る ④ElasticTranscoderにアクセスできるIAMを作る。 ⑤IAMの鍵をPHPのソースに記載して①のS3にファイルアップ、パイプラインに変換指示を送る ⑥パイプラインがトランスコード処理を行い、出力先にトランスコード済みファイルが配置される。 のような手順です。 ⑤の部分のPHPプログラムは例えば下記のようになります。 public function getInstance() {         $this->obj = null;         if (is_null($this->obj)) {             $this->obj = Aws::factory([                 'key'    => (IAMで設定したkey),                 'secret' => (IAMで設定したパスワード),                 'region' => Region::TOKYO             ])->get('ElasticTranscoder');         }         return $this->obj;     }     public function createJob($args) {         try {             $res = $this->getInstance()->createJob($args);         } catch (Exception $e) {             echo $e->getMessage();             return false;         }         return $res;     }          public function transcode() {           $result = $this->createJob([             'PipelineId' => (③で作成したパイプラインのID),             'Input' => [                 'Key' => (入力S3に配置したファイルパス),             ],             'Outputs' => [                 // mp4 & Thumbnail                 [                     'Key'              => (出力先に配置したいファイルパス),                     'PresetId'         => '1351620000001-100070',                     'ThumbnailPattern' =>(入力S3に配置したファイルパス)."-{count}"                 ],                 // webm                 [                     'Key'             => $mp4Keyfile.'.webm',                     'PresetId'        => '1351620000001-100240',                 ]             ],         ]);     } transcode関数をコールした時点で入力用S3には動画ファイルを置かれている前提です。 これで、出力したいファイルパスにはmp4とwebmという形式で変換された動画が配置されるはずです。 今回は例としてmp4とwebm形式を指定しています、PCとスマートフォンの対応という部分を考えれば この2つのフォーマットを作成すればほぼカバーできると思います。 もし、それ以外の形式で出力したければ 'PresetId'         => '1351620000001-100070', をそれに準じたものに変更すれば出力されます。 この出力形式はプリセットと呼び、出力したい最適なものを https://docs.aws.amazon.com/ja_jp/elastictranscoder/latest/developerguide/system-presets.html から選択して使用するか、細かい設定をしたければ自作でプリセットを作成することができます。 簡単ですが以上です。 今まで動画配信業者等を使わなくては実現できなかった部分が自前でできるので日々技術進歩を感じますね。 それでは (^-^)ノ
  • テクログ

    JQueryのappendでaタグがはずれたよ

    こんばんわ!俺です! Jqueryではまりまったので備忘として記載します。 今回AJAXで、「もっと見る」みたいなボタンをつけて、 検索一覧を取得して表示する・・・みたいな事をしていたんですけど、 リストのaタグで囲う範囲が大分トリッキーでした。    あかさたな    年齢17歳 こんな感じ。 初期表示の分はちゃんと囲えてるんだけど、AJAXから戻したHTMLを JqueryでAppendすると    あかさたな    年齢17歳 タグが外れた状態で帰ってきてしまいます。 そもそも、AタグでDiv囲うなよとか色々あると思うんですけど、 今回はどうしてもこんな感じで・・・ Aタグ自体にDisplay:Block;してみたり・・・ 中のDivにDisplay:inline;してみたり・・・色々ためしたけど、やっぱり変。 じゃあ仕方ないからっつって、    あかさたな    年齢17歳 Divの中にいれてみたんだけど、AJAXから戻ってきたやつだけ    あかさたな    年齢17歳 こうなる・・・ 何でやねーーーーーーーーーーーーーーーーーーーーーーーーーーーーーん って怒りに任せてキーボードを叩き続けたら、よくよくみるとAJAXで戻した時点のJsonでは    あかさたな    年齢17歳 ちゃんと囲えてる・・・ Jqueryの$('セレクタ').append(html); このAppend処理を通ると    あかさたな    年齢17歳 こうなる。 Appendが賢い?すぎて??変なタグ組みとかだとかってに 閉じちゃうみたいな。でももう変じゃないんだけど?なんで? 困るんだが?? document.getElementById("セレクタ").innerHTML = document.getElementById("セレクタ").innerHTML + res.html; でJavascriptで書いたらできました。 なんかもうね、たまにコーディングするとこれだよ!!! Jqueryが無理だったらベタのJavascirptで書いてみてね!!!!
  • テクログ

    Database:Mysqlがめっちゃ重い時

     こんにちは、ni-yoです。すごく開発者向けな話になりますが、MysqlのDBが応答返せないくらいめっちゃ重い。モニターするとDBのCPUやメモリが異常に高騰している…とかありますよね。 その時に負荷の原因となり得る時間がかかっているクエリを探すためには、SHOW FULL PROCESSLISTというコマンドが便利です。 MYSQLのSQLを発行する画面でSHOW FULL PROCESSLIST;を実行! 出てくる一覧としては、idUSERHostdbCommandTimeStateInfoがでてきます。 IDはプロセスIDUserはMysqlの実行ユーザ名Hostは接続元dbは対象のデータベースTimeは実行している時間(秒)Stateは実行している状態(init処理、データ送信処理等の状態)Infoは実行しているモノ(主にSQL)です。 見方はわりとシンプルにCommandがQuery且つTimeが異常に高い値(数十秒を超えている等)を探します。そういったSQLがあった場合例えばIndex不足で異常に処理時間がかかっていたりという可能性があります。 もしそれがあった場合、Infoに書いてあるSQLを確認して、どの処理から発行されたSQLなのか、そのSQLは正しいSQLなのかを確認しておくと後に同様の事象が発生する事を抑止することができますが、どちらにせよそういった原因となるSQLがいつまでも動いていては負荷の原因が取り除かれませんので、勇気を持ってMysql上から問題のプロセスを取り除きます。 SHOW FULL PROCESSLISTで下記のような時間がかかっているSQLが発見された場合(Timeが300なので5分間応答が返ってきていない)45384100 root (発行元IPアドレス):(ポート番号) (テーブル名) Query 300 Sending data SELECT DISTINCT…(省略) KILL (プロセス番号)で上記SQLの実行を停止できます。 プロセス番号は一番左のカラムになりますので、勇気を持って下記コマンドを実行します!KILL 45384100をたたくと、他の動作には影響を与えず上記問題のSQLの実行を強制停止できます。(Windowsのタスクマネージャにあるプロセスを落とすのと同じような感じです) 何か異常に時間がかかる場合は上記処置で負荷は改善されるかと思います。 負荷の原因は一概に言えませんが、例えばSHOW PROCESSLISTでプロセスが100個とか出てくるのは基本的には異常であると見なせると思います。 例えば月1千万PVあるサイトだったとしても、1秒で考えれば10,000,000 ÷ 30(日) ÷ 24(時間) ÷ 60(分) ÷ 60(秒) ≒ 4回/秒ということなので、もちろんピーク時間のなどはありますが慣らすと1秒に4回程度の閲覧になるはずです。 ユーザページで様々なSQLを発行しているとしても大概のWebサイトはシングルスレッドで1つのSQLが終わったら次を発行の動作しているとは思うのでSQLの個数を考えるとしたら概ね10個以内に収まるはずです。 月数億PVも行くような超大手のようなサイトでは上記の考えはあてはまりませんが、月1千万PV程度にも満たないサイトがプロセスが100個以上いくような場合には、Mysqlのコネクションが切れない(もしくは不必要に長い)設定がサーバにしてある。DosやDDos等通常ありえない大量のリクエストが送信されている。等の部分を確認する必要があるかもしれません。  それでは(* ̄▽ ̄)ノ~~ マタネー♪