剛好找到一份之前整理的sar指令文件
就把它放上來吧!
---------------------------------------------------------------------------------------
Format: sar [-aAbcdgkmpqruvwy] [-o file] t [n]
sar [-aAbcdgkmpqruvwy] [-s time] [-e time] [-i sec] [-f file]
1.–a 文件存取的情形
# sar –a –o test.txt 10 5
# sar –a –f test.txt
iget/s:每秒由inodes定位的文件數量。沒有在目錄名稱查詢快取(dnlc)裡
namei/s: 每秒文件系統路徑查詢的數量
dirbk/s:每秒讀取目錄區的數量
這些值越大,表明核心花在存取用戶文件上的時間越多
2. –b buffer的使用情形
#sar –b 5 5
bread/s:每秒從磁碟讀入系統緩衝區buffer的數量。
lread/s:平均每秒從系統buffer讀出的邏輯數量。
%rcache:在buffer?cache中進行邏輯讀的百分比(100%-bread/lread)
bwrit/s:平均每秒從系統buffer向磁盤所寫的物理數量。
lwrit/s:平均每秒寫到系統buffer邏輯數量。
%wcache:在buffer?cache中進行邏輯寫的百分比。
pread/s:平均每秒請求物理讀的次數。
pwrit/s:平均每秒請求物理寫的次數。
如果%rcache小於90或%wcache小於65,則需增加buffer的空間來改善效能。
3. –c Check System Call Statistics
#sar –c 5 5
scall/s:每秒有幾次所有類型的系統呼叫(system call)。
sread/s:每秒有幾次讀取類型的系統呼叫。
swrit/s:每秒有幾次寫入類型的系統呼叫。
fork/s:每秒有幾次fork system call。
exec/s:每秒有幾次exec system call。(exec/s) / (fork/s) >3表效能很差
rchar/s: 每秒由讀操作的系統call傳送的字符(bytes)。
wchar/s: 每秒由寫操作的系統call傳送的字符。
4.-d 硬碟的使用情形
#sar –d 5 5
device:sar命令正在監視的磁碟名字。
%busy:硬碟忙時,處理傳送請求所佔時間的百分比。
avque:序列滿時,未完成請求數量的平均值。
r+w/s:每秒硬碟讀寫的數據量。
blks/s:每秒傳送的塊數,每塊512-byte。
avwait:序列滿時傳送請求等待序列空閒的平均時間。
avserv:完成傳送請求所需平均時間(毫秒)。
avque值較高表示硬碟傳輸速度較慢。
5.-g Check Page-Out and Memory
#sar –g 10 5
pgout/s--每秒換出(pageout)請求數
ppgout/s--每秒換出(pageout)的頁數
pgfree/s--由page daemon每秒放入空閒列表的頁數
pgscan/s--由page deamon每秒掃瞄的分頁數
%ufs_ipf--UFS incode與由iget獲取的有重用頁的空閒列表的比例。
pgfree/s和pgscan/s值過大代表memory不夠用
page deamon是 UNIX 系統的一個核心處理程序(kernel process)。
其處理程序識別碼(process ID)為 2。
其功能是在採用需求分頁的虛擬記憶體(virtual memory)管理系統中,
將處理程序位址空間的資料寫入次要儲存設備(secondary storage device),
或是由次要儲存設備把資料寫到處理程序的位址空間。
2010年6月22日 星期二
2010年6月7日 星期一
[Solaris]telnet逾時登出
在user的.profile加入TMOUT設定值即可
例如
不過以上設定會成功的前提是user使用的shell是bash shell
Updated at 2010/06/08
同樣的主題
在網上有人說修改/etc/default/login裡的TIMEOUT也可以
此設定值的意義是在login輸入帳號密碼的時候
未動作超過TIMEOUT設定值
就會fail
與talnet逾時登出無關
例如
TMOUT=60代表60秒未進行任何操作即自動登出(遺失與主機的連線)
不過以上設定會成功的前提是user使用的shell是bash shell
Updated at 2010/06/08
同樣的主題
在網上有人說修改/etc/default/login裡的TIMEOUT也可以
# TIMEOUT sets the number of seconds (between 0 and 900) to wait before但測試結果的事實而言
# abandoning a login session.
#
TIMEOUT=60
此設定值的意義是在login輸入帳號密碼的時候
未動作超過TIMEOUT設定值
就會fail
與talnet逾時登出無關
2010年5月24日 星期一
[Solaris]create group/user
最近會整理一些solaris的基本設定與操作
就順便記在這裡好了
-------------------------------------------------------------------------------------
1.Create group
Command: groupadd [-g gid] group
Related File: /etc/group
#groupadd -g 2001 RD
2.Create user
Command: useradd [-u uid | -g group] | -d dir | -s shell | -c comment | -m [-k skel_dir] ] username
Related File: /etc/passwd
#useradd -u 2002 -g RD -d /export/home/william -c “Engineer” -m -s /bin/sh william
3.Change password
Command: passwd username
#passwd william
就順便記在這裡好了
-------------------------------------------------------------------------------------
1.Create group
Command: groupadd [-g gid] group
Related File: /etc/group
#groupadd -g 2001 RD
2.Create user
Command: useradd [-u uid | -g group] | -d dir | -s shell | -c comment | -m [-k skel_dir] ] username
Related File: /etc/passwd
#useradd -u 2002 -g RD -d /export/home/william -c “Engineer” -m -s /bin/sh william
3.Change password
Command: passwd username
#passwd william
2010年5月13日 星期四
[Solaris]鐘訊時間同步
打算把solaris的系統時間設定跟與手上這台PC一樣
而PC是設自動與time.windows.com同步處理
下面的指令是一次性的設定
Updated at 2010/05/17
另一種方式
修改/etc/inet/ntp.conf
(如果沒有這個檔案可以直接copy /etc/inet/ntp.server)
將server的地方改為要同步對時的time server
而PC是設自動與time.windows.com同步處理
下面的指令是一次性的設定
#/usr/sbin/ntpdate -s time.windows.com可以再用crontab的方式來做定期的同步更新
Updated at 2010/05/17
另一種方式
修改/etc/inet/ntp.conf
(如果沒有這個檔案可以直接copy /etc/inet/ntp.server)
將server的地方改為要同步對時的time server
server time.windows.com prefer接著啟動xntpd service
/etc/init.d/xntpd start
2010年4月7日 星期三
[Solaris]crontab editor
用crontab -e指令想修改cron檔案
但畫面不正常
google了一下原來是編輯器的問題
所以新增環境變數就可以了
但畫面不正常
google了一下原來是編輯器的問題
所以新增環境變數就可以了
# EDITOR=/usr/bin/vi
# export EDITOR
2010年4月2日 星期五
[SEO]Tell google i change domain
最近做了domain name的更新
所以依照Google網站管理員工具的提示
在網站設定->變更網址 設定舊domain轉換到已驗證過的新domain
也使用了301永久導向讓舊網站的連結導至新網站
最後提交了新網站的sitemap
在一切就緒後
觀察了幾天的sitemap變化
發現新網站的索引還是得從0開始
而舊網站的索引則下降
雖然新網站被索引的速度比一般新的網站快
但舊網站索引也是掉的很快
整體來說這樣不是一個好的現象
甚至是糟糕
(會這麼快告訴google我換domain name
也是擔心google將新網站當成duplicate site)
看來下次可以考慮
只先驗證新網站
等到新網站的索引到一定的數目後
再通知google
Update at 2010/04/12
索引有明顯成長
猜測是google有做調整吧!
所以依照Google網站管理員工具的提示
在網站設定->變更網址 設定舊domain轉換到已驗證過的新domain
也使用了301永久導向讓舊網站的連結導至新網站
最後提交了新網站的sitemap
在一切就緒後
觀察了幾天的sitemap變化
發現新網站的索引還是得從0開始
而舊網站的索引則下降
雖然新網站被索引的速度比一般新的網站快
但舊網站索引也是掉的很快
整體來說這樣不是一個好的現象
甚至是糟糕
(會這麼快告訴google我換domain name
也是擔心google將新網站當成duplicate site)
看來下次可以考慮
只先驗證新網站
等到新網站的索引到一定的數目後
再通知google
Update at 2010/04/12
索引有明顯成長
猜測是google有做調整吧!
2010年3月19日 星期五
[SEO]百度sitemap
約一年前提交過百度的sitemp
不過審核不過...
猜測原因是網站的類型不符合吧!
最近又開始查查看有沒有百度的sitemap資訊
發現互聯網新聞開放協議似乎不像以前可以主動提交了
後來查了較近時間內的資訊
蠻多人都說其實百度跟google都是用同樣的sitemap協定
所以不用再特別做一份
只要在robots.txt加入
Sitemap: http://domain.com/sitemap_baidu.xml
即可
(檔名必須是sitemap_baidu)
就等等看百度的index是否有明顯效果吧!
不過審核不過...
猜測原因是網站的類型不符合吧!
最近又開始查查看有沒有百度的sitemap資訊
發現互聯網新聞開放協議似乎不像以前可以主動提交了
後來查了較近時間內的資訊
蠻多人都說其實百度跟google都是用同樣的sitemap協定
所以不用再特別做一份
只要在robots.txt加入
Sitemap: http://domain.com/sitemap_baidu.xml
即可
(檔名必須是sitemap_baidu)
就等等看百度的index是否有明顯效果吧!
2010年3月10日 星期三
[Lucene]Query&filter
紀錄一下目前查詢所用到的Query
1.MultiFieldQueryParser
適用於查詢多個field
2.PhraseQuery
適用於查詢多個關鍵詞,但只能查同一個field
3.WildcardQuery
可利用正則表達式的查詢方式
4.BooleanQuery
組合查詢,負責串接Query
如果是BooleanClause.Occur.MUST則是一定會出現
但沒有去跟其他的Query做個聯集
為了做出正確的查詢結果
我把原本使用BooleanClause.Occur.MUST的Query改成用filter來做
將query出來後的結果透過filter再過濾一次
目前加入filter後還沒有感覺到效能變差
所以就暫不研究BooleanClause.Occur了!
1.MultiFieldQueryParser
適用於查詢多個field
String[] field = {"A","B","C"};
Analyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
MultiFieldQueryParser mfqp = new MultiFieldQueryParser(Version.LUCENE_CURRENT, field, standardAnalyzer);
2.PhraseQuery
適用於查詢多個關鍵詞,但只能查同一個field
PhraseQuery pQuery = new PhraseQuery();
pQuery.add(new Term("A", keep));
pQuery.add(new Term("A", coding));
3.WildcardQuery
可利用正則表達式的查詢方式
WildcardQuery wQuery = new WildcardQuery(new Term("A", keep+"*"));
4.BooleanQuery
組合查詢,負責串接Query
booleanQuery.add(pQuery, BooleanClause.Occur.SHOULD);其中BooleanClause.Occur.SHOULD這個屬性不是很懂
booleanQuery.add(wQuery, BooleanClause.Occur.SHOULD);
如果是BooleanClause.Occur.MUST則是一定會出現
但沒有去跟其他的Query做個聯集
為了做出正確的查詢結果
我把原本使用BooleanClause.Occur.MUST的Query改成用filter來做
將query出來後的結果透過filter再過濾一次
Filter filter = new QueryWrapperFilter(mustQuery);//再次地過濾查詢結果
目前加入filter後還沒有感覺到效能變差
所以就暫不研究BooleanClause.Occur了!
2010年2月5日 星期五
[Lucene]全文檢索
把AP的lucene版本從1.9.0升級到3.0.0(以下的舊版指1.9.0,新版指3.0.0)
發現一些舊的寫法(物件)在新版已不沿用了
還好在架構上並沒有太大的變動
所以也沒改到太多東西
就利用這邊來簡單紀錄一下
我認為的Lucene精神還是分做兩部份
建立索引和查詢索引
建立索引
IndexWriter的建構子已跟舊版不同
利用String或File傳入目錄路徑已不適用
新版以Directory類做為參數
其中Field.Index的屬性與舊版有些不同
原有的Field.Index.UN_TOKENIZED和Field.Index.TOKENIZED
已取代成Field.Index.ANALYZED和Field.Index.NOT_ANALYZED
這部份差別比較大的地方是新版已無Hits類別
舊版的寫法為
發現新版在建立索引時
比舊版快了非常多
以約50000筆的資料來比
舊版花了一兩分鐘
新版只用5,6秒
看來花時間更新是有價值的!
發現一些舊的寫法(物件)在新版已不沿用了
還好在架構上並沒有太大的變動
所以也沒改到太多東西
就利用這邊來簡單紀錄一下
我認為的Lucene精神還是分做兩部份
建立索引和查詢索引
建立索引
IndexWriter的建構子已跟舊版不同
利用String或File傳入目錄路徑已不適用
新版以Directory類做為參數
FSDirectory,它表示一個存儲在文件系統中的索引的位置。
RAMDirectory,它表示一個存儲在內存當中的索引的位置。
FSDirectory FSDir = FSDirectory.open(fPath);產生Document並加入Field
Analyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
IndexWriter writer = new IndexWriter(FSDir, standardAnalyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
其中Field.Index的屬性與舊版有些不同
原有的Field.Index.UN_TOKENIZED和Field.Index.TOKENIZED
已取代成Field.Index.ANALYZED和Field.Index.NOT_ANALYZED
Document doc = doc = new Document();IndexWriter加入document
doc.add(new Field("id", id, Field.Store.YES, Field.Index.ANALYZED));
writer.addDocument(doc);查詢索引
writer.optimize();
writer.commit();
writer.close();
IndexSearcher searcher = new IndexSearcher(FSDir, true);
String[] field = {"id"};
Analyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
MultiFieldQueryParser mfqp = new MultiFieldQueryParser(Version.LUCENE_CURRENT, field, standardAnalyzer);
Query query = mfqp.parse(sQuery);
TopDocs td = searcher.search(query, 1000);
int totalHits = td.totalHits;
ScoreDoc[] hits = td.scoreDocs;
for (int i = 0; i < hits.length; i++) {
Document doc = searcher.doc(hits[i].doc);
}
這部份差別比較大的地方是新版已無Hits類別
舊版的寫法為
Hits hits = searcher.search(query);更新版本後
for (int i = 0; i < hits.length(); i++) {
Document doc = hits.doc(i);
}
發現新版在建立索引時
比舊版快了非常多
以約50000筆的資料來比
舊版花了一兩分鐘
新版只用5,6秒
看來花時間更新是有價值的!
2010年1月29日 星期五
[Struts2]iterator status attribute
<s:iterator value="list" status="rowStatus">
Count:<s:property value="#rowStatus.count"/>
Index:<s:property value="#rowStatus.index"/>
isEven:<s:property value="#rowStatus.even"/>
isOdd:<s:property value="#rowStatus.odd"/>
isFirst:<s:property value="#rowStatus.first"/>
isLast:<s:property value="#rowStatus.last"/>
</s:iterator>
status的屬性可以從Class IteratorStatus找到
2010年1月15日 星期五
[Solaris]Apache+Tomcat+mod_jk
透過mod_jk當connector整合apache和tomcat
環境:solaris 8(已安裝JDK和tomcat)
務必找到適合自己環境的對應版本
Apache: apache-2.2.14-sol8-sparc-local.gz from sunfreeware
mod_jk: mod_jk-1.2.28-httpd-2.2.X.so from www.apache.org
Step 1.安裝apache
Step 2.加入mod_jk.so
把下載好的mod_jk-1.2.28-httpd-2.2.X.so改名為mod_jk.so
移至{apache.home}/modules下就可以了
Step 3.編輯httpd.conf
Step 4.新增mod_jk.conf於{apache.home}/conf
Step 5.新增workers.properties於{apache.home}/conf
Step 6.修改{tomcat.home}/conf/server.xml
啟動tomcat和apache
就可以測試在80 port下是否可順利連上tomcat
環境:solaris 8(已安裝JDK和tomcat)
務必找到適合自己環境的對應版本
Apache: apache-2.2.14-sol8-sparc-local.gz from sunfreeware
mod_jk: mod_jk-1.2.28-httpd-2.2.X.so from www.apache.org
Step 1.安裝apache
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-ssl=shared沒用到的modules可以不用裝
--enable-ssl --with-ssl=/usr/local/ssl --enable-proxy --enable-proxy-connect
--enable-proxy-ftp --enable-proxy-http --with-ldap --enable-ldap
--enable-authnz-ldap
Step 2.加入mod_jk.so
把下載好的mod_jk-1.2.28-httpd-2.2.X.so改名為mod_jk.so
移至{apache.home}/modules下就可以了
Step 3.編輯httpd.conf
LoadModule jk_module lib/mod_jk.so
# mod_jk settings
Include conf/mod_jk.conf
Step 4.新增mod_jk.conf於{apache.home}/conf
#setup the workers.properties file path, default prefix path is httpd's home (/usr/local/httpd)
JkWorkersFile conf/workers.properties
JkLogFile /var/log/jk.log
JkShmFile /var/log/jk-runtime-status
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
# Sample JkMounts. Replace these with the paths you would
# like to mount from your JSP server.
# syntax: JkMount ${URL_DIR}/*.jsp worker_name
JkMount /project/*.jsp jsp-ap
Step 5.新增workers.properties於{apache.home}/conf
# worker.list defined worker_name, used by mod_jk.conf
worker.list=jsp-ap
worker.jsp-ap.port=8009
worker.jsp-ap.host=192.168.1.154
worker.jsp-ap.type=ajp13
worker.jsp-ap.lbfactor=1
Step 6.修改{tomcat.home}/conf/server.xml
<Host name="192.168.1.154" debug="0" appBase="/default" unpackWARs="true" autoDeploy="true">設定完以上步驟
<Context path="/project" docBase="/project"
debug="5" reloadable="true" crossContext="true">
</Context>
</Host>
啟動tomcat和apache
就可以測試在80 port下是否可順利連上tomcat
2010年1月14日 星期四
[urlrewrite]參數值的加號變空白
目前使用中的Url Rewrite Filter有個問題一直找不到好的解決方法
當傳遞的參數中包含了加號('+')
在server端接收時會變成空白(' ')
後來換了3.2.0版
也試了不少的方法
包括先將參數編碼
或是透過filter的enocde,decode的attribute,function
還是無法解決
後來終於try出一個能解決的方法(但不是很好...)
step 1
step 2
set一個相同的參數名
目前這樣做算是解決了這個討厭的問題
當傳遞的參數中包含了加號('+')
在server端接收時會變成空白(' ')
後來換了3.2.0版
也試了不少的方法
包括先將參數編碼
或是透過filter的enocde,decode的attribute,function
還是無法解決
後來終於try出一個能解決的方法(但不是很好...)
step 1
<urlrewrite decode-using="null">
step 2
set一個相同的參數名
<rule>
<set type="request" name="Keyword">$1</set>
<from>/Search(.*).html</from>
<to type="forward">/ItemList.action?Keyword=$1</to>
</rule>
目前這樣做算是解決了這個討厭的問題
訂閱:
文章 (Atom)