#!/usr/bin/perl
use strict;
use warnings;
use Sys::Statistics::Linux::NetStats;
use Data::Dumper;
my $lxs = Sys::Statistics::Linux::NetStats->new;
$lxs->init;
sleep 1;
my $stat = $lxs->get;
#원하는 것만 찍을 때
#print $stat->{eth1}{rxbyt};
# 모든 내용 덤프
print Dumper $stat;
대역폭은 일정
대역폭은 일정 기간동안의 전송량의 평균 * 8 로 구합니다. iptraf 라 제가 만든 check-utils 에 포함된 chkbandwidth 로 볼 수 있습니다.
sysfs
/sys/class/net/eth0/statistics/*
를 보세요.
...
http://www.linux.com/archive/articles/50649
iptables를 통해서 보는 것도 있군요..
여러가지 방법
네트웍 트레픽을 볼 수 있는 프로그램
ifstat - http://gael.roualland.free.fr/ifstat/
dstat - http://dag.wieers.com/home-made/dstat/
리눅스에서 /proc/net/dev 를 파싱해서 노가다로 계산하는 방법
http://www.linux.co.kr/home/lecture/index.php?cateNo=1&secNo=10959&theNo=&leccode=11062
제가 즐겨 쓰는방법
http://search.cpan.org/dist/Sys-Statistics-Linux/ 모듈내의
http://search.cpan.org/perldoc?Sys::Statistics::Linux::NetStats
모듈을 사용하여
결과
리눅스에서 각종 성능치는 /proc 이하 파일들을 특정시간 간격을 두고 파싱하여 계산하는 것이 대부분입니다.
이런 계산을 수동으로 한다는 건 위에서 쉘로 awk등을 사용해서 삽질해서 값을 구하는 것 처럼 귀찮고
손이 많이 가는 노가다성 작업이기도 하고요...
그럴때는 앞에서 말씀드린 Perl CPAN
http://search.cpan.org/dist/Sys-Statistics-Linux/
모듈을 쓰면 필요한 거의 모든 시스템정보 및 성능치를 손쉽게 뽑아낼 수 있습니다.
/proc 파일을 직접 노가다 파싱해서 작업하셨던 분들이면 그동안의 삽질이 억울해서 눈물흘리실 듯 :)
좋은 정보 감사합니다.
제가 Perl을 몰라서 그러는데 모듈은 어떻게 설치하나요?
여길 참고하세요
여길 참고하세요
http://gypark.pe.kr/wiki/Perl/%EB%AA%A8%EB%93%88%EC%84%A4%EC%B9%98
답변 감사드립니다~
지금까지 /proc에 장치 파일들을 가지고 직접 파싱해서 계산했는데, 관련 유틸이 많군요 ㅋ
그런데 제가 알고 싶은 것은 "네트워크에 바인드된 가용 대역폭의 크기" 입니다.
(예를 들어 윈도우의 경우 wmi를 이용하면 현재 랜카드의 대역폭을 얻어 올 수 있습니다.)
이값을 이용해서 네트워크 대역폭 사용률 ( 네트워크 트래픽 (in or out) / 네트워크에 바인드된 가용 대역폭의 크기 * 100)
계산하려고 하는게 목적인데 제가 요점을 정확히 전달하지 못한 것 같군요 ㅡㅡ;
리눅스 네트웍 인터페이스의 최고 대역폭
Windows의 경우 WMI로
Win32_PerfRawData_Tcpip_NetworkInterface 나
2003 이상일 경우 Win32_PerfFormattedData_Tcpip_NetworkInterface의
CurrentBandwidth를 항목을 가져오면 되지만
Linux의 경우 ethtool 같은 유틸리티나 dmesg에 남은 로그를 보고
NIC의 최대대역폭을 가져올 수 있는 방법 등등 이 있으나
참고: http://linuxhelp.blogspot.com/2005/10/find-speed-of-your-ethernet-card-in.html
제가 같은 문제로 다양한 방법을 테스트 해본 결과 어떤 방법을 사용해도 그 최대 대역폭
값을 알아낼 수 없는 경우가 발생하더군요.(가상머신상에서 리눅스가 돌때 등)
그래서 저의 결론은 아직 리눅스에서는 완벽한 방법은 없다. 입니다.
결국 그렇군요;;
다시 한번 많은 담변 감사드립니다~
dmesg로도 초기 부팅시에 랜카드 대역폭이 출력되질 않는군요~
열심히 찾아봐야 겠습니다~
대역폭 사용량을
대역폭 사용량을 편하게 보실려면 bwm-ng를 써 보시면 될 듯 하고요.
그러니깐.. 10Mbps나 100Mbps냐 이걸 보실려고 하시는 거 같은데.. 이건 보통 dmesg로 관련 이더넷 장치를 바인딩하는 시점에 대한 정보를 보면 나타납니다. (가끔 안 나오는 것들도...) dmesg와 grep를 이용하면 쉽게 찾을 수 있습니다.
dmesg | grep eth0
뭐 대충 이렇게..
-- 이여송 --
HomePage: http://lys.lecl.net/
Blog: http://lys.lecl.net/blog
LECL: http://www.lecl.net/
E-Mail: yeosong@gmail.com ysnglee2000@lecl.net
MSN: ysnglee2000@hotmail.com
사람천사
음..
ethtool 이 있다면, 그냥 그걸로 열어보면 될 것 같은데요...
linux/ethtool.h 를 열어 보시면, ioctl 에서 쓸 수 있는 정보들이 있습니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기