วันจันทร์, กุมภาพันธ์ 27, 2549

Dtrace และ SystemTab

พอดีลองวนๆ ไปหาอะไรอ่านเกี่ยวกับ project ที่ RH ดำเนินการอยู่พอดีไปเอะใจตรง SystemTab project ลองไปไล่ๆ อ่านดูทำไม concept เหมือน DTrace เลยหว่า

ลองอ่านๆ ในส่วนของ architecture ดูอืมม ไม่เหมือนแค่ concept ด้วยเห่ะ ทำงานยังคล้ายๆ กันเลย ใครสนใจลองไปดูได้ architecture paper (July 2005)

ส่วนในของ DTrace มันเป็นระบบ trace ที่ sun ทำออกมา support solaris ตั้งแต่ version 10 เป็นต้นมา ลองไปอ่านๆ ดูแล้วกัน แล้วจะบอกว่าคล้ายกันมาก

เอาคร่าวๆ แล้วกัน เอามาแปะให้ดู

DTrace
DTrace is a comprehensive dynamic tracing framework for the Solaris Operating Environment. DTrace provides a powerful infrastructure to permit administrators, developers, and service personnel to concisely answer arbitrary questions about the behavior of the operating system and user programs.


SystemTap
The goal of SystemTap is to provide infrastructure to simplify the gathering of information about the running Linux kernel so that it can be further analyzed. This can assist in identifying the underlying cause of a performance or functional problem. SystemTap is designed to eliminate the need for the developer to go through the tedious instrument, recompile, install, and reboot sequence required to collect data on the operation of the kernel. The recent addition of Kprobes to the Linux kernel provides the needed support but does not provide an easy to use infrastructure. SystemTap provides a simple command line interface and scripting language for writing kernel instrumentation.


แต่ละรายต่างก็บอกของตัวเองดี แต่ตอนนี้ทาง sun ค่อนข้างได้เปรียบมี scirpt ให้ Dtrace รวมทั้ง lib ให้ใช้ค่อนข้างเยอะ แต่ข้อเสียของมัน มีอยู่อย่างเดียว กิน resource เยอะฉิบเป๋งเลย แต่ในอนาคต ท่าทางฝั่ง RH น่าจะใช้งานง่ายกว่านะ แต่ไม่รู้สิ คงต้องรอดูต่อไป


ใครลอกใครหว่า เอาเถอะ ช่างมันมีอะไรมาให้ใช้มากขึ้นก็ดียิ่งๆ ขึ้น แต่ต้องมานั่งเขียน script อีกแล้วอ่ะดิ เฮ้อ


เพิ่มเติม
ตัว Project frysk ก็ค่อนข้างน่าสนใจ แต่ทำไม มันจับแยกกันหว่า ดูรายละเอียดได้ที่ http://sourceware.org/frysk
.

real world FIND usage

จำไม่เคยได้ซักทีเกี่ยวกับ find command แปะไว้กันลืมเจอมาจาก http://www.wagoneers.com/UNIX/FIND/find-usage.html

sudo find / -type f -name *.jpg -exec cp {} . \;

find . -type f -size +10000 -exec ls -al {} \;
find . -atime +1 -type f -exec mv {} TMP \; # mv files older then 1 day to dir TMP
find . -name "-F" -exec rm {} \; # a script error created a file called -F
find . -exec grep -i "vds admin" {} \;
find . \! -name "*.Z" -exec compress -f {} \;
find . -type f \! -name "*.Z" \! -name ".comment" -print | tee -a /tmp/list
find . -name *.ini
find . -exec chmod 775 {} \;
find . -user xuser1 -exec chown -R user2 {} \;
find . -name ebtcom*
find . -name mkbook
find . -exec grep PW0 {} \;
find . -exec grep -i "pw0" {} \;
find . -atime +6
find . -atime +6 -exec ll | more
find . -atime +6 -exec ll | more \;
find . -atime +6 -exec ll \;
find . -atime +6 -exec ls \;
find . -atime +30 -exec ls \;
find . -atime +30 -exec ls \; | wc -l
find . -name auth*
find . -exec grep -i plotme10 {};
find . -exec grep -i plotme10 {} \;
find . -ls -exec grep 'PLOT_FORMAT 22' {} \;
find . -print -exec grep 'PLOT_FORMAT 22' {} \;
find . -print -exec grep 'PLOT_FORMAT' {} \;
find . -print -exec grep 'PLOT_FORMAT' {} \;
find ./machbook -exec chown 184 {} \;
find . \! -name '*.Z' -exec compress {} \;
find . \! -name "*.Z" -exec compress -f {} \;
find /raid/03c/ecn -xdev -type f -print
find /raid/03c/ecn -xdev -path -type f -print
find / -name .ssh* -print | tee -a ssh-stuff
find . -name "*font*"
find . -name hpmcad*
find . -name *fnt*
find . -name hp_mcad* -print
find . -grep Pld {} \;
find . -exec grep Pld {} \;
find . -exec grep Pld {} \;
find . -exec grep PENWIDTH {} \; | more
find . -name config.pro
find . -name config.pro
find /raid -type d ".local_sd_customize" -print
find /raid -type d -name ".local_sd_customize" -print
find /raid -type d -name ".local_sd_customize" -ok cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;
find /raid -type d -name ".local_sd_customize" -exec cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;
find . -name xeroxrelease
find . -exec grep xeroxrelease {} \;
find . -name xeroxrelease
find . -name xeroxrelease* -print 2>/dev/null
find . -name "*release*" 2>/dev/null
find / -name "*xerox*" 2>/dev/null
find . -exec grep -i xeroxrelease {} \;
find . -print -exec grep -i xeroxrelease {} \;
find . -print -exec grep -i xeroxrelease {} \; > xeroxrel.lis
find . -exec grep -i xeroxrel {} \;
find . -print -exec grep -i xeroxrel {} \;
find . -print -exec grep -i xeroxrel {} \; | more
find /raid/03c/inwork -xdev -type f -print >> /raid/04d/user_scripts/prt_list.tmp
find . -exec grep '31.53' {} \;
find . -ls -exec grep "31/.53" {} \; > this.lis
find . -print -exec grep "31/.53" {} \; > this.lis
find . -print -exec grep 31.53 {} \; > this.lis
find . -exec grep -i pen {} /;
find . -exec grep -i pen {} \;
find . -print -exec grep -i pen {} \; | more
find . -exec grep -i pen {} \;
find . -atime +6 -exec ll | more \;
find . -atime +6 -exec ll \;
find . -atime +6 -exec ls \;
find . -atime +30 -exec ls \;
find . -atime +30 -exec ls \; | wc -l
find . \! -name '*.Z' -exec compress -f {} \;
find . -name 'cache*' -depth -exec rm {} \;
find . -name 'cache*' -depth -print | tee -a /tmp/cachefiles
find . -name 'cache[0-9][0-9]*' -depth -print | tee -a /tmp/cachefiles
find . -name 'hp_catfile' 'hp_catlock' -depth -print | tee -a /tmp/hp.cats
find . -name 'hp_catfile' -name 'hp_catlock' -depth -print | tee -a /tmp/hp.cats
find . -name 'hp_cat*' -depth -print | tee -a /tmp/hp.cats
find . -name 'hp_cat[fl]*' -depth -print | tee -a /tmp/hp.cats
find /raid -name 'hp_cat[fl]*' -depth -print
find . \! -name '*.Z' -exec compress -f {} \;
find . -name '*' -exec compress -f {} \;
find . -xdev -name "wshp1*" -print
find . -xdev -name "wagoneer*" -print
find . -name "xcmd" -depth -print
find /usr/contrib/src -name "xcmd" -depth -print
find /raid -type d -name ".local_sd_customize" -exec ls {} \;
find /raid -type d -name ".local_sd_customize" -exec cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;

วันพฤหัสบดี, ธันวาคม 22, 2548

จะทำยังไงหาก swap partition เราไม่พอใช้งาน

อันนี้เป็น ของเก่าทำเก็บไว้กันลืม

โดยปกติแล้ว เวลาเราลง OS มักจะได้รับคำแนะนำอยู่เสมอๆ ว่าควรจะ create swap partition ให้เป็นสองเท่าของเนื้อที่ Ram ของตัวเครื่อง ซึ่งบางครั้งมันก็ไม่ได้จำเป็นเสมอไป ยกตัวอย่างง่ายๆ หากเรามีเครื่องที่มี ram ซัก 2 GB ขึ้นไป หากทำตามคำแนะนำมันจะต้องเสียพื้นที่ 4GB ให้เป็น swap partition ซึ่งดูๆ ไปแล้วมันต้องบ้าแน่ๆ หากทำแบบนั้นกับ server ที่ไม่ได้ใช้ ram ขนาดนั้น โดยปกติ ผมเองจะทำอย่างมากก็ create swap partition แค่ 1GB นี่ก็โครตเยอะแล้ว

แต่หลังจากนั้น ผมก็พบประสบการณ์อันน่ากลัว ที่ไม่เคยคาดคิดเกิดขึ้น คือ ram ไม่พอ แล้วมันไป swap จน swap จะหมด จนคิดว่าจะทำอย่างไรดี

สุดท้ายก็นึกว่าได้ มันทำ swap file ได้นี่หว่า (วิธีนี้อาจจะมีข้อเสีย ซึ่งจากที่ไปอ่านๆ ตามต่างประเทศเค้าบอกกันว่า มันจะทำให้ช้ากว่าแยกเป็น parition แต่ผมคิดว่าถ้ามันไม่บ่อยก็คงไม่มีปัญหาอะไร)

วิธีทำ
  1. ท ำการสร้าง file จากความว่างเปล่า โดยในที่นี้ผมจะสร้างให้มันมีขนาดซัก 512MB เอามันไว้ที่ไหนก็ได้ที่มีที่เหลือให้มันอยู่ นั้นล่ะ ในกรณีนี้สมมุติว่า root มันว่างแล้วกัน ง่ายดี
    # dd if=/dev/zero of=/swapfile1 bs=1024 count=524288000


  2. ขั้นต่อมาสั่งให้มันกลายเป็น swap file ซะ
    # mkswap /swapfile1

  3. จากนั้น สั่งให้มันสามารถนำมาใช้งานได้โดยสั่ง
    # swapon /swapfile1

    สามารถลองตรวจสอบได้จาก คำสั่ง cat /proc/swap

  4. ในกรณีที่เราต้องการให้มันกลายเป็น default ไปเลยนั้นให้แก้ไขที่ /etc/fstab แล้วก็เติมข้อความดังข้างล่างนี้ลงไปท้ายสุด
    /swapfile1 swap swap defaults 0 0