Port Exhaustion

ตามที่ได้เคย blog ไว้ว่า บังเอิญได้มาเกี่ยวข้องกับการทดสอบประสิทธิภาพของระบบซึ่งเป็น Window-base และได้เห็นปัญหาในการได้มาของ software จึงอยากจะจดบันทึกไว้เตือนตัวเอง และเผื่อจะเป็นประโยชน์กับคนอื่นได้บ้าง

ซึ่งจากการทดสอบระบบ เราพบว่า web application ที่ได้ทดสอบมีปัญหา เมื่อต้องรองรับผู้ใช้จำนวนมากๆ และจากผู้รู้หลายคนช่วยกันตรวจสอบจึงรู้ว่า อาการนี้เรียกว่า port exhaustion ซึ่งก็คือ application มีการใช้ dynamic port จนเต็ม ซึ่ง port ที่ใช้จะเป็น outbound connection (เพราะถ้าเป็น inbound มันจะมีอยู่ port เดียวอ่ะนะ)

ซึ่งวิธีการที่จะตรวจสอบการใช้ คือการใช้ netstat

> netstat -nao

ซึ่งจะแสดง connection ทั้งหมด และ pid เราจะต้องมองหา connection ที่ผิดปกติเอง ซึ่งโดยปกติถ้ามีอาการของ port exhaustion แสดงว่าจะต้องมีการใช้ port จำนวนมากจาก application หนึ่ง ซึ่งอาจจะดูได้จาก application ที่มี pid เดียวกัน และมีการใช้ port เป็นจำนวนมาก

ทีนี้หาได้แล้วทำไง ซึ่งจากเอกสารที่อ่านมา ที่ทำได้คือแจ้งเจ้าของ application ให้มาดูและแก้ไข หรือไม่ในฐานะของผู้พัฒนา application ก็คือจะต้องตรวจสอบ application ของเราเองว่ามีการใช้ connection เยอะเกินไปหรือไม่ แต่สำหรับบาง application ที่มาไกลเกินว่าจะแก้ไข วิธีที่จะแก้ไขได้ก็คือ

  1. เพิ่ม dynamic port ซึ่งแต่เดิม Windows Server 2012 จะมีการกำหนดค่า MaxUserPort ไว้ใน Windows Registry โดยสามารถกำหนได้สูงสุดคือค่า 65534 (แต่ port 1024 แรก จะกันไว้สำหรับ application บางตัวอยู่แล้ว)
  2. กำหนด connection timeout ของ port ให้ลดลง เนื่องจาก หลังจากที่ application ได้มีการปิด port ไปแล้ว port นั้นๆ จะยังใช้ไม่ได้จนกว่า 4 นาทีต่อมา ซึ่งจะต้องไปแก้ไขค่า TcpTimedWaitDelay ใน Windows Registry (แต่อยากให้ลองหาข้อมูลเพิ่มเติมกันนะค่ะ ว่าทำไมมันถึงต้องกันไว้ 4 นาที เพื่อสวัสดิภาพของระบบโดยแท้จริง) 

ทั้งนี้วิธีแก้ไข Port หรืออาการของ Port โดยละเอียด ดูได้จาก reference ข้างท้ายนะค่ะ (งานใหม่ๆ ไม่ได้มาพร้อมความลำบากเพียงอย่างเดียว มันมาพร้อมความรู้ใหม่ๆ เสมอ - เหรียญมี 2 ด้านเสมอเช่นเดียวกัน)

Reference:
Port Exhaustion
Avoiding TCP/IP Port Exhaustion
TcpTimedWaitDelay
MaxFreeTcbs

Thailand SPIN 2015


- เน้น business value สำหรับแต่ละ feature
- gap between business and technical make agile stuck.
- อะไรที่เกี่ยวกับ budget เป็นหน้าที่ของ pm.
- cost of quality มีจริง (including agile)
- การได้ cert มาง่าย การรักษาให้ quality of process คงอยู่ยาก
- agile ต้องทำทุกระดับในองค์กร
- agile เป็นแค่ tools เลือกใช้ให้ถูก

ติดตั้ง Git เชื่อมต่อกับ GitHub

1. สมัคร GitHub ที่ https://github.com/
เมื่อสมัครแล้ว GitHub จะส่งเมล์มา verify email ที่เราใส่ไป เพราะจะใช้เป็น email ในการส่งการเปลี่ยนแปลงของ project ที่เราเข้าร่วมมาให้ ให้เราทำการ verify ให้เรียบร้อย

2. download โปรแกรมจาก http://git-scm.com/

3. double click เพื่อติดตั้ง

4. สร้าง ssh key สำหรับเชื่อมต่อกับ GitHub ในการ push, pull ไฟล์
โดยการ คลิ๊กขวาที่ directory ใดๆ เลือก Git Bash



เมื่อเข้าหน้า command ให้ใช้คำสั่ง

$ ssh-keygen

ซึ่ง git จะไปสร้าง key file ใน home directory\.ssh ของ user ซึ่งสำหรับ Windows จะอยู่ที่ C:\Users\[username]\.ssh

ซึ่งไฟล์จะประกอบด้วย

  • known_hosts เป็น ip และ public key ของ GitHub
  • id_rsa ซึ่งเป็น private key
  • id_rsa.pub เป็น public key

5. add public key ใน GitHub
โดย login เข้า GitHub
เลือก Setting
เลือก SSH Keys
กดปุ่ม Add SSH Key


ตั้งชื่อ title ซึ่งเป็นอะไรก็ได้
copy content ของ id_rsa.pub ใส่ใน key

โดย 1 user จะสามารถมี key ที่เครื่องใดๆ ได้ 1 key เท่านั้น แต่ถ้า 1 user มีหลายเครื่องก็จะต้องสร้าง key สำหรับแต่ละเครื่องในการติดต่อกับ GitHub

6. ตั้งค่า user name, email
ใน Git Bash

$ git config --global user.name "xxx"
$ git config --global user.email "xxx@xxx"


เท่านี้ก็น่าจะเสร็จเรียบร้อยสำหรับการติดตั้งค่ะ





สรุปคำสั่ง run Robot Framework

สำหรับการทำงานพื้นฐานเลย คือสั่งให้ script ทำงานธรรมดา

> pybot [filename.txt]

สำหรับการกำหนดตำแหน่งที่เก็บไฟล์ที่ได้จากการทำงานของ script

> pybot --output [folder] [filename.txt]
> pybot --log [folder] [filename.txt]
> pybot --report [folder] [filename.txt]

หรือถ้าต้องการเก็บทั้งหมดไว้ใน folder เดียวกัน 
> pybot --outputdir [folder] [filename.txt]
> pybot -d [folder] [filename.txt]

และถ้าต้องการให้ไฟล์ที่ได้มีการใส่วันเวลาต่อท้าย เพื่อไม่ให้ทับไฟล์เก่า
> pybot --timestampoutputs [filename.txt]
> pybot -T [filename.txt]


หรือในกรณีต้องการกำหนดค่าตัวแปรที่จะใส่เข้าไปใน script

> pybot --variable [name]:[value]

หรือกำหนดประเภทการทำงานซึ่งได้แก่ ExitOnFailure, random:test, random:suit, randam:all

> pybot --runmode [mode] [filename.txt]










ติดตั้ง Sublime สำหรับ Robot Framework

Sublime เป็น text editor ตัวหนึ่งเท่านั้นเองค่ะ แต่ว่ามันมี package เสริมสำหรับเขียน Robot Framework script

วิธีการติดตั้ง
1. download โปรแกรมกันได้ที่ http://www.sublimetext.com/
สำหรับเราเลือก download เป็น portable ค่ะ

2. extract ตัว .zip ก็เป็นอันเสร็จเลย

3. ติดตั้ง package control ของ sublime โดย copy คำสั่งใน https://packagecontrol.io/installation#st2
ไปที่ sublime console (เมนู View > Show Console) แล้ว enter เลย

4. ติดตั้ง Robot Framework package
ไปที่เมนู Tools > Command Palette...
พิมพ์และเลือก "Package Control : Install Package"
พิมพ์ Robot เลือกติดตั้ง Robot Framework 2 package


เสร็จแล้วค่า... ต่อไปก็เริ่มเขียนได้เลย


ติดตั้ง Robot Framework

ก่อนจะติดตั้ง Robot Framework กรุณาติดต้้ง Python ก่อนนะค่ะ
หลังจากติดตั้ง Python เสร็จแล้ว ก็ติดตั้ง Robot Framework จาก pip เลยค่ะ

1. ติดตั้ง Robot Framework โดย run command

> pip install robotframework

จากนั้นให้ลอง run command

> pybot 

จะได้ดังนี้



2. ติดตั้ง Selenium บน Robot Framework เพื่อใช้ในการทดสอบ web application

> pip install robotframework-selenium2library


แค่นี้เสร็จแล้วค่ะ

ติดตั้ง Python และ pip

เริ่มมาจากไปเรียน Robot Framework ซึ่งเป็น Tools สำหรับทำการทดสอบโปรแกรม และตัว Robot Framework มันเป็น Python ค่ะ ก็เลยต้องติดตั้ง ก็เลยเอามาฝากเล่นๆ


1. download Python ก่อนค่ะ ที่นี่ https://www.python.org/downloads/ ซึ่งสำหรับ Robot Framework จะต้องใช้ version 2 เพราะเหมือนยังมีปัญหากับ version 3 ก็ download version 2.7.9 มาค่ะ เป็น file .msi สำหรับการติดตั้งบน Windows

2. ก็ double click ที่ตัว .msi ที่ได้มา แล้วอย่าลืมเลือก "Add python.exe to Path" ด้วยนะค่ะ จะได้ไม่ต้องมา add เองทีหลัง

แต่ถ้าใครลืม ก็สามารถเพิ่ม PYTHON_HOME ไปยัง directory ที่ติดตั้ง ลงในตัวแปร PATH ใน environment variable ที่หลังได้ค่ะ

ทดสอบโดยการพิมพ์ python ที่หน้า command


ถ้าได้ฉะนี้ ก็แปลว่า ลง Python เรียบร้อย

3. จากนั้น ติดตั้ง pip ซึ่งเป็นตัวจัดการ package สำหรับ Python (Package Installation for Python)
โดยการ download get-pip.py จากหน้า http://www.pip-installer.org/en/latest/installing.html

4. แล้ว run command
> python get-pip.py
5. เพิ่ม %PYTHONE_HOME%/Scripts ในตัวแปร PATH เพื่อให้สามารถ run pip ได้

เมื่อลงเสร็จแล้ว เราสามารถลบตัว get-pip.py ออกไปได้เลยค่ะ

Cloud (สรุปอย่างย่อ)

Cloud Computing Definition - Key Character


  • On-demand self-service
  • Ubiquitous network access
  • Location independent resource polling
  • Rapid elasticity
  • Pay per use

Cloud Delivery Model

Traditional Model
  • Software as a Service (SaaS)
  • Platforms as a Service (PaaS)
  • Infrastructure as a Service (Iaas)
Latest Model
  • Process as a Service คือ Traditional Model ที่ความสามารถ Business Process Management, Service Oriented Architecture, Social Software

Cloud Technology's Type

  • Cloud 1.0 : IaaS - ทดแทน Hosting Service
  • Cloud 2.0 : Iaas + Mobile App - จัดการพวก non-sql data, non-structure data (Hadoop)
  • Cloud 3.0 : IaaS, PaaS, HPC, Big Data Analysis

Cloud Computing Standard Recommendation

  • ISO 27001 (Security Foundation)
  • ISO 22301 (BCM)
  • CSA Star Cert (Cloud, Governance)
  • ISO 50000 (Energy Management)
  • ISO 14001 (Environmental)
  • ISO 14064 (Greenhouse Gas)

Big Data's Type

  • 1.0 (Transaction Data, Structure Data) - ข้อมูลจากในองค์กร ex. ERP ใช้ Data Mining
  • 2.0 (Non-structure Data) - เพิ่มข้อมูลจาก Social Nework ใช้ Grid Computing (Hadoop)
  • 3.0 (Huge, Very Large Data) - เพิ่มข้อมูลจาก IoT ใช้ HPC ไม่เน้น Hadoop