ApacheのMPMの概要とチューニング方法についてです。
続きを読む
VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで
VPSサーバーを使ってWebサイトを運用する過程で行った作業、調査内容を備忘としてまとめています。
アーカイブ
LinuxのLVMの概要と表示コマンド
LinuxのLVMの概要と設定内容を表示するコマンドについてまとめました。
続きを読む
vmstatコマンドでシステムの状況をモニター
linuxのvmstatコマンドでシステムの状況をモニターする方法を確認しました。
1)vmstatコマンドの概要
・メモリ使用量、ディスク使用状況、CPU使用率などの情報を表示。
・引数に数値nを指定するとn秒間隔に測定して結果を表示する。
(実行例)
$ vmstat 5 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 97656 164588 151932 795708 0 0 4 11 0 0 1 0 99 0 0 0 0 97656 164332 151940 795708 0 0 0 13 61 34 0 0 100 0 0 0 0 97656 164456 151940 795708 0 0 0 0 63 32 0 0 100 0 0 0 0 97656 164320 151944 795704 0 0 0 12 108 63 1 0 99 0 0 0 0 97656 164376 151944 795708 0 0 0 0 61 32 0 0 100 0 0
2)表示結果の見方
①procs
r:実行待ちのプロセス数
b:ブロックされているプロセス数
・ブロックされているプロセスは、ハードウェア、特にディスク処理を待機しているため実行できない。
・bの値が高い場合は、ディスクがボトルネックとなっている可能性が高い。
・rがCPUコアの数より多い場合は、性能の低下を引き起こすので要注意。
②memory
swpd:仮想メモリ(スワップメモリ)がどれだけ使用されているか?
free:アイドルメモリ
buff:バッファとして使用されているメモリ
cache:キャッシュとして使用されているメモリ
③swap
si:スワップからreadされたバイト(/s)
so:スワップに書き込まれたバイト(/s)
・スワップが発生している場合は、物理メモリが不足している。ディスク待ちでブロックされているプロセス数が増加する。
④io
bi:ブロックデバイス(ハードディスク)からreadされたバイト(blocks/s)
bo:ブロックデバイス(ハードディスク)に書き込んだバイト(blocks/s)
・ディスクがボトルネックとなっている場合は、この数値を下げる対策を検討する。
⑤system
in:CPU割り込みの数(/s)
cs:コンテキストスイッチの数(/s)
・コンテキストスイッチは、CPUが処理するプロセスを切替えたり、割り込みを処理する場合などに行われる。この数が著しく高い場合は性能に影響が出る。
⑥cpu
us:非カーネルのユーザーコードで実行された時間
sy:カーネルのコードで実行された時間
id:アイドルタイム
wa:I/O待ちの時間
st:仮想マシンに使用された時間
・waが高い場合は、ioやswapが高くなっていないかチェックする。
Apache mod_rewriteの仕組み、設定方法、動作確認
Apache mod_rewriteの仕組み、設定方法、動作確認の方法などについてまとめました。
続きを読む
AngularJSの依存性注入の指定方法
AngularJSの依存性注入の指定方法をまとめました。
続きを読む
AngularJSの$watch、$digest、$applyの概要
AngularJSの$watch、$digest、$applyなど内部の仕組みについて調べた内容をまとめました。
続きを読む
AngularJS同梱のjqLiteの概要
カスタムディレクティブでHTML要素に対して各種操作を行うjqLiteを使用する場合があります。jqLiteメソッドの使用方法をまとめました。
続きを読む
AngularJSカスタムディレクティブ内でコントローラを生成し、他のディレクティブで利用
AngularJSカスタムディレクティブ内でコントローラを生成し、他のディレクティブで利用するサンプルを作成しました。
続きを読む
AngularJSカスタムディレクティブのtranscludeオプション、ng-transcludeディレクティブの使用例
AngularJSカスタムディレクティブのtranscludeオプション、ng-transcludeディレクティブの使用例をまとめました。
続きを読む
AngularJSの基本的なカスタムディレクティブの作成方法
サンプルコードを使ってAngularJSの基本的なカスタムディレクティブの作成方法をまとめてみました。
デモとコードサンプルはこちら。
(1)サンプルコードの仕様
商品リストを表示する下記内容を”productsList”という名前でカスタムディレクティブを使って書き換えてみます。
(カスタムディレクティブ未使用)
<div ng-controller="cus1Ctrl">
<ol>
<li ng-repeat='item in products'>
{{item.product_name}} : {{item.price | number:0}}円
</li>
</ol>
</div>
(カスタムディレクティブ使用)
<div ng-controller="cus1Ctrl">
<div products-list="products"></div>
</div>
(2)カスタムディレクティブを作成
var demoApp = angular.module('demoApp', []);
demoApp.directive("productsList", function () {
return {
link: function (scope, element, attrs) {
scope.data = scope[attrs["productsList"]];
},
scope: true,
template: "<ol><li ng-repeat='item in data'>{{item.product_name}} : {{item.price | number:0}}円</li></ol>",
restrict: "A"
}
});
1)カスタムディレクティブの定義
・モジュールのdirective(directive名,ファクトリ関数)メソッドを使って定義。
demoApp.directive(“productsList”, function () {
上記ディレクティブによって、HTMLビュー内の”products-list”と記述された要素、属性がtemplateで定義した内容に置換されます。
・ディレクティブの名前は大文字小文字を区別し、”productsList”のようにcamelCaseで正規化される。
HTMLは大文字小文字を区別しないので”products-list”のように小文字の”-“区切りを使用します。
2)scope属性
サンプルでは、scope: trueと指定し、親のスコープ(この例では”cus1Ctrl”コントローラ)を継承した上でカスタムディレクティブ専用に新しい子スコープを生成します。
scope属性を明示的に指定していない場合のデフォルトは、scope: falseでカスタムディレクティブは親のスコープを使用し、自由に更新することも出来ます。
3)リンク関数
HTML内のディレクティブとスコープ内のデータを連結する役割を持ちます。
●リンク関数の引数
①scope
・ディレクティブが適用されるビュー内のscope。
scopeでtrueと設定しているので”cus1Ctrl”コントローラの$scope.productsで定義しているデータを参照する事が出来ます。
②element
・カスタムディレクティブが適用される対象のHTML要素のjqLiteオブジェクトで、jqLiteを使ってDOM操作をナビゲート、操作する事が出来る。
※jqLite
AngularJSに同梱されているjQueryの簡易版。
https://docs.angularjs.org/api/ng/function/angular.element
・このサンプルでは下記のように使用しているのでdiv要素となる。
<div products-list=”products”>
③atts
・ディレクティブが適用される対象のHTML要素の属性名(正規化された名前)と値のペアのハッシュオブジェクト。
このサンプルでは、カスタムディレクティブをdiv要素の属性として使用しているので、products-listという属性に指定された値をattrs[“productsList”]で取得出来ます。
attrs[“productsList”]で属性に指定した値”products”が取得できるので、scope[attrs[“productsList”]]で”cus1Ctrl”コントローラの$scope.productsを参照できます。
4)restrict属性
カスタムディレクティブはデフォルトでは属性名として利用できるようになっていて、要素名やクラス名として指定する事も出来ます。
○属性名で指定
restrict: ‘A’(デフォルト)
例)
<div products-list=”products”>
○要素名で指定
restrict: ‘E’
例)
<products-list list-source=”products”>
この例では、”products”という値をlist-sourceという属性を使って渡しています。
○クラス名で指定したい場合
restrict: ‘C’
例)
<div class=”products-list: products”>
○要素名または属性名を指定したい場合
restrict: ‘AE’
5)template、templateUrl属性
・カスタムディレクティブ内に挿入するHTMLを指定する。
templateオプションはインラインでHTMLを記述し、templateUrlオプションは、外部ファイルのパスを指定し、ファイルに記述したHTMLをインクルードします。