指定したファイルをAll Usersデスクトップに移動するスクリプト書いた
指定したファイルをAll Usersデスクトップに移動するスクリプト書いた。OSのバージョンが6.0より低かったら"C:/Documents and Settings/All Users/デスクトップ/"に、6.0以上だったら"C:/Users/Public/Desktop/"に移動する。あんまり使い道ないと思うけど…
var args = WScript.Arguments; var fs = WScript.CreateObject("Scripting.FileSystemObject"); var wbem = WScript.CreateObject("WbemScripting.SWbemLocator"); var wmi = wbem.ConnectServer(); var os = wmi.ExecQuery("Select * From Win32_OperatingSystem"); var e = new Enumerator(os); for(; !e.atEnd(); e.moveNext()){ var item = e.item(); var os_version = item.Version.slice(0,3); if(os_version < 6.0){ for(i = 0; i < args.length; i = i + 1){ fs.MoveFile(args(i), "C:/Documents and Settings/All Users/デスクトップ/"); } }else{ for(i = 0; i < args.length; i = i + 1){ fs.MoveFile(args(i), "C:/Users/Public/Desktop/"); } } }
こんな感じで使う。
>cscript //nologo Move_to_All_Users_Desktop.js recipes.txt equipments.txt
XPとかだとドラッグアンドドロップでも動くけど、Vista以降だとコマンドプロンプトを管理者権限で開いて実行しないと無理っぽい。
TeratermとWinSCPとサクラエディタをサイレントインストールする
TeratermとWinSCPとサクラエディタはInno Setupを使って作られてることが分かったので、サイレントインストールしてみる。まずはこんな感じで、infファイル(セットアップ情報ファイル)を保存しながらのインストール開始を指示する。
>winscp514setup /SAVEINF="winscp514.inf"
インストールが始まったら、あとはふつうにインストールしていく。
インストールが完了すると、infファイル(セットアップ情報ファイル)ができてる。中身はこんな感じ。
[Setup] Lang=jp Dir=C:\Program Files (x86)\WinSCP Group=WinSCP NoIcons=0 SetupType=full Components=main,shellext,pageant,puttygen,transl,transl\eng,transl\jp Tasks=enableupdates,enableupdates\enablecollectusage,desktopicon,desktopicon\common,sendtohook,urlhandler
Teratermとサクラエディタも同じように作る。できた中身はこんな感じ。
[Setup] Lang=ja Dir=C:\Program Files (x86)\teraterm Group=Tera Term NoIcons=0 SetupType=custom Components=teraterm,ttssh,cygterm,logmett,ttproxy,additional_plugins,additional_plugins\ttxresizemenu,additional_plugins\ttxttyrec Tasks=desktopicon,quicklaunchicon
[Setup] Lang=ja Dir=C:\Program Files (x86)\sakura Group=サクラエディタ NoIcons=0 SetupType=all Components=main,help,keyword Tasks=startmenu,quicklaunch,proglist,fileassoc
infファイルができたら、今度はそのinfファイルを読み込ませてサイレントインストールしてみる。3ついっぺんに、かつ、時間を計測したかったのでcygwinのbashのスクリプトでやってみた。作ったスクリプトはこんな感じ。/SILENTが「黙ってやれ」、/LOADINFが「このinfファイルを読んでやれ」、/SP-が「StartupPromptを表示しない(ホントに初めていいですか?とか聞くな)」とゆーよーな指示みたい。
time ./teraterm-4.77 /SILENT /LOADINF="teraterm-4.77.inf" time ./winscp514setup /SILENT /LOADINF="winscp514.inf" time ./sinst2-0-5-0 /SP- /SILENT /LOADINF="sakura2-0-5-0.inf"
実行してみる。
$ bash ./all.sh real 0m1.733s user 0m0.000s sys 0m0.015s real 0m3.396s user 0m0.015s sys 0m0.015s real 0m0.881s user 0m0.000s sys 0m0.015s
合計でだいたい6秒くらいでインストール完了した。
参考にしたページ→ Inno Setup Help
論理プロセッサの数に応じて処理を行う
ウチのパソコンは論理プロセッサを4つ積んでる。
論理プロセッサの数に応じて処理を行うスクリプト書いた。
$numberOfLogicalProcessors = (Get-WmiObject -query "SELECT * FROM Win32_Processor").NumberOfLogicalProcessors for($i = 2; $i -le $numberOfLogicalProcessors; $i++){ echo("kani" + $i) }
こんな感じで使う。
> .\for.ps1
kani2
kani3
kani4
BCL easyPDF SDKていうのをC++から使ってみた
わりと簡単な感じだった。Visual C++ 2010 Expressでふつうにビルドできた。C++よく分かんないので、ファイル名を可変にする方法が分からない…
#include "stdafx.h" #import "progid:easyPDF.Printer.7" static const TCHAR* MyProgID = _T("easyPDF.Printer.7"); int _tmain(int argc, char* argv[]){ TCHAR lpInFileName[] = _T("C:\\Users\\hide\\Pictures\\aaa.jpg"); TCHAR lpOutFileName[] = _T("C:\\Users\\hide\\Documents\\aaa.pdf"); HRESULT hr = CoInitialize(NULL); { EasyPDFPrinter::IPrinterPtr pPrinter = NULL; EasyPDFPrinter::IPrintJobPtr pPrintJob = NULL; hr = pPrinter.CreateInstance(MyProgID); pPrintJob = pPrinter->GetPrintJob(); pPrintJob->PrintOut(lpInFileName, lpOutFileName); } CoUninitialize(); return 0; }
ファイルディスクリプタの上限を超えたらTomcatがどうなるか調べてみた
ファイルディスクリプタの上限を超えたらTomcatがどうなるか調べてみた。とりあえずyumコマンドでインストール。
# yum install tomcat5 tomcat5-webapps tomcat5-admin-webapps
こんな感じで、必ず10秒かかっちゃうページを用意した。
<%@ page contentType="text/html;charset=UTF-8" autoFlush="true" %> <html> <head> <title>10</title> </head> <body> <% for(int i=0;i<=10;i++){ Thread.sleep(1000); out.print("…"); out.flush(); } %> </body> </html>
Apache Benchで負荷をかける。(同時接続数205)
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>ab -c 205 -n 205 http://192.168.159.128:8080/out.jsp
catalina.outにこんな感じのメッセージが出た。
SEVERE: All threads (150) are currently busy, waiting. Increase maxThreads (150) or check the servlet status
server.xmlのmaxThreadsを150から1500に上げたら出なくなった。
# diff -u server.xml_old server.xml --- server.xml_old 2012-09-20 04:54:41.000000000 -0700 +++ server.xml 2012-09-20 05:00:10.000000000 -0700 @@ -75,7 +75,7 @@ <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" - maxThreads="150" minSpareThreads="25" maxSpareThreads="75" + maxThreads="1500" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
負荷を上げてみる。上限を1500まで上げたので、リクエストを1280件同時に上げる。
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>ab -c 1280 -n 1280 http://192.168.159.128:8080/out.jsp This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.159.128 (be patient) apr_socket_recv: 既存の接続はリモート ホストに強制的に切断されました。 (730054)
こんどは強制的に切断されるようになった。
catalina.outにはこういうメッセージがバンバン出た。
SEVERE: Endpoint ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8080] ignored exception: java.net.SocketException: Too many open files
ファイルディスクリプタの上限に引っかかってるっぽい。なので、起動スクリプト/etc/init.d/tomcat5を修正してみる。
こんな感じでulimitコマンドを追加したら出なくなった。
# diff -u tomcat5_old tomcat5 --- tomcat5_old 2012-09-20 05:41:00.000000000 -0700 +++ tomcat5 2012-09-20 05:42:45.000000000 -0700 @@ -176,6 +176,7 @@ # See how we were called. function start() { + ulimit -n 4096 echo -n "Starting ${TOMCAT_PROG}: " if [ -f "/var/lock/subsys/${NAME}" ] ; then if [ -f "/var/run/${NAME}.pid" ]; then
プロセスごとのCPU使用率をログに取るには
プロセスごとのCPU使用率はtopコマンドで画面に表示できる。だけど、topコマンドは端末の画面の大きさに合わせて自動的に結果をカットしてくれる(レコードが固定長になる)ので、ログを取るのには向いていない。
きれいにログを取るには、psコマンドを使う。
while true; do ps auxww --sort=-pcpu | sed -e "s/^/`date +%T` /" >> hoge.log; sleep 60; done;
こんな感じで取れる。
06:41:29 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 06:41:29 root 4255 0.1 1.9 26872 20332 tty7 Ss+ 05:52 0:04 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7 06:41:29 root 3761 0.1 0.3 10348 3112 ? Ss 05:52 0:03 cupsd 06:41:29 68 3991 0.0 0.4 6412 4496 ? Ss 05:52 0:01 hald 06:41:29 hide 5213 0.0 1.5 63916 15740 ? Sl 05:55 0:01 gnome-terminal 06:41:29 root 4075 0.0 0.0 1968 672 ? S 05:52 0:01 hald-addon-storage: polling /dev/hda