关于linux的进程中的各个线程cpu占⽤情况的分析和查看
我们常常会在新开的服搭建⼀个游戏的server,有时候要进⾏压⼒測试,那么怎样来看呢,⼀般我们会通过top命令查看各个进程的cpu和内存占⽤情况,获得到了我们的进程id,然后我们或许会通过pstack命令查看⾥边的各个线程id以及相应的线程如今正在做什么事情,分析多组数据就能够获得哪些线程⾥有慢操作影响了server的性能,从⽽得到解决⽅式。
⽐⽅这种以组数据:
curl是什么命令
[root@AY130816144542124256Z bin]# pstack 30222
Thread 9 (Thread 0x7f729adc1700 (LWP 30251)):
#0  0x00007f72a429b720 in sem_wait () from /lib64/libpthread.so.0
#1  0x0000000000ac5eb6 in Semaphore::down() ()
#2  0x0000000000ac5cac in Queue::get() ()
#3  0x00000000009a583f in DBManager::processUpdate(Queue*) ()
#4  0x00000000009a4bfb in dbUpdateThread(void*) ()
#5  0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#6  0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 8 (Thread 0x7f727c579700 (LWP 30252)):
#0  0x00007f72a429b720 in sem_wait () from /lib64/libpthread.so.0
#1  0x0000000000ac5eb6 in Semaphore::down() ()
#2  0x0000000000ac5cac in Queue::get() ()
#3  0x00000000009a5799 in DBManager::processQuery(Queue*) ()
#4  0x00000000009a4c3a in dbQueryThread(void*) ()
#5  0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#6  0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 7 (Thread 0x7f7257fff700 (LWP 30253)):
#0  0x00007f72a42997bb in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x00007f72a549ee08 in utils::thread::condition_impl::timed_wait(int) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#2  0x00007f72a549ebd3 in utils::thread::Condition::timed_wait(int) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#3  0x00000000009d5f57 in utils::MessageQueue<FightInfo*>::pop() ()
#4  0x00000000009d5557 in FightReport::svc() ()
#5  0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#6  0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#7  0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 6 (Thread 0x7f72397b7700 (LWP 30254)):
#0  0x00007f72a4588fc3 in poll () from /lib64/libc.so.6
#1  0x00007f72a0fbded4 in __libc_res_nsend () from /lib64/libresolv.so.2
#2  0x00007f72a0fba76a in __libc_res_nquery () from /lib64/libresolv.so.2
#3  0x00007f72a0fbad29 in __libc_res_nquerydomain () from /lib64/libresolv.so.2
#4  0x00007f72a0fbb9cf in __libc_res_nsearch () from /lib64/libresolv.so.2
#5  0x00007f729adc37a7 in _nss_dns_gethostbyname4_r () from /lib64/libnss_dns.so.2
#6  0x00007f72a457a4c3 in gaih_inet () from /lib64/libc.so.6
#7  0x00007f72a457cb20 in getaddrinfo () from /lib64/libc.so.6
#8  0x00007f72a56fc782 in Curl_getaddrinfo_ex () from /usr/lib64/libcurl.so.4
#9  0x00007f72a56f1d42 in Curl_getaddrinfo () from /usr/lib64/libcurl.so.4
#10 0x00007f72a56c9e77 in Curl_resolv () from /usr/lib64/libcurl.so.4
#11 0x00007f72a56ca138 in Curl_resolv_timeout () from /usr/lib64/libcurl.so.4
#12 0x00007f72a56d8d88 in ?
() from /usr/lib64/libcurl.so.4
#13 0x00007f72a56ddb79 in ?
() from /usr/lib64/libcurl.so.4
#14 0x00007f72a56de76e in Curl_connect () from /usr/lib64/libcurl.so.4
#15 0x00007f72a56e69b0 in Curl_perform () from /usr/lib64/libcurl.so.4
#16 0x0000000000ae6e3d in HttpClient::svc() ()
#17 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#18 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#19 0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 5 (Thread 0x7f721af6f700 (LWP 30255)):
#0  0x00007f72a455691d in nanosleep () from /lib64/libc.so.6
#1  0x000000000098cb8a in Sleep(unsigned long) ()
#2  0x000000000098b87d in DynResource::svc() ()
#3  0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#4  0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#5  0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 4 (Thread 0x7f71fc727700 (LWP 30256)):
#0  0x00007f72a455691d in nanosleep () from /lib64/libc.so.6
#1  0x000000000098cb8a in Sleep(unsigned long) ()
#2  0x0000000000a61516 in PlayerOpLogThread::svc() ()
#3  0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#4  0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#5  0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 3 (Thread 0x7f71ddedf700 (LWP 30257)):
#0  0x00007f72a4592c73 in epoll_wait () from /lib64/libc.so.6
#1  0x00007f72a51f334f in Epoll_Reactor::run_reactor_event_loop() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2
#2  0x00007f72a51f2523 in Net_Thread::svc() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2
#3  0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#4  0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#5  0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 2 (Thread 0x7f71bf697700 (LWP 30258)):
#0  0x00007f72a4592c73 in epoll_wait () from /lib64/libc.so.6
#1  0x00007f72a51f334f in Epoll_Reactor::run_reactor_event_loop() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2
#2  0x00007f72a51f2523 in Net_Thread::svc() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2
#3  0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#4  0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#5  0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 1 (Thread 0x7f72a60ae7e0 (LWP 30222)):
#0  0x00007f72a4584c95 in _xstat () from /lib64/libc.so.6
#1  0x00007f72a45483e0 in __tzfile_read () from /lib64/libc.so.6
#2  0x00007f72a4547864 in tzset_internal () from /lib64/libc.so.6
#3  0x00007f72a4547b20 in tzset () from /lib64/libc.so.6
#4  0x00007f72a4546699 in timelocal () from /lib64/libc.so.6
#5  0x0000000000b0b08d in Achieve::GetRemainTime(AchieveTemplate*) ()
#6  0x0000000000b115ca in Achieve::update() ()
#7  0x0000000000a197ce in Player::update() ()
#8  0x0000000000b1b272 in PlayerMng::Tick() ()
#9  0x0000000000a73105 in GameServer::FrameTick(unsigned int) ()
#10 0x0000000000a6ff80 in GameServer::run() ()
#11 0x0000000000a773a1 in main ()
[root@AY130816144542124256Z gameserver]# ps  -eLo pid,lwp,pcpu | grep 30222
30222 30222 31.4
30222 30251  0.0
30222 30252  0.0
30222 30253  0.0
30222 30254  0.0
30222 30255  0.0
30222 30256  1.2
30222 30257  1.2
30222 30258  1.0
多组数据显⽰表明我们的主逻辑线程的确占⽤的cpu⾮常⾼,发现事实上在Achieve::update() 的时候做了太多没实⽤的推断,⽽且能够降低循环进⼊的次数的。所以我在这⾥进⾏了优化
后来⽤了⼀下iptraf命令查看了⽹络流量:
第⼀项:IP流量监控
第⼆项:常规查看⽹卡流量状态。仅仅查看各⽹卡的总流量
第三项:具体查看⽹卡流量状态。⽐⽅按TCP,UDP,ARP等协议查看
选all interfaces,查看全部⽹卡接⼝
界⾯分上下两部分,上部分可具体显⽰哪个与之相连的IP。发了多少包,即时流量是多少,下部分,能够显⽰udp等信息。
显⽰连接本地server的全部连接流量情况
另外不得不提到另外⼀个命令sar:
sar有⾮常多⽤途。假设要来监控⽹络流量。使⽤以下的命令⾏⽅式:
sar -n DEV interval count
当中。interval是统计时间间隔。以秒为单位;count是总共统计⼏次。假设为0就不断的统计直到 Ctrl+C 打断,否则运⾏count次就退出。⽐⽅:sar -n DEV 1 4
⽐⽅:sar -n DEV 10 0
IFACE:LAN接⼝
rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接收的字节数
txbyt/s:每秒钟发送的字节数
sar -n DEV -u 1 10
07:22:01 PM    IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s  rxcmp/s  txcmp/s  rxmcst/s
07:22:02 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:22:02 PM      eth0      2.47      0.00      0.11      0.00      0.00      0.00      0.00
07:22:02 PM      eth1    80.25    22.22      3.53      3.52      0.00      0.00      0.00
07:22:02 PM    CPU    %user    %nice  %system  %iowait    %steal    %idle
07:22:03 PM    all      1.85      0.00      1.06      0.00      0.00    97.09
07:22:02 PM    IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s  rxcmp/s  txcmp/s  rxmcst/s
07:22:03 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:22:03 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:22:03 PM      eth1    66.67    19.75      2.95      3.22      0.00      0.00      0.00
07:22:03 PM    CPU    %user    %nice  %system  %iowait    %steal    %idle
07:22:04 PM    all      2.12      0.00      1.06      0.00      0.00    96.82
07:22:03 PM    IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s  rxcmp/s  txcmp/s  rxmcst/s
07:22:04 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:22:04 PM      eth0      7.32      4.88      0.65      0.38      0.00      0.00      0.00
07:22:04 PM      eth1    85.37    28.05      4.18      3.88      0.00      0.00      0.00
07:22:04 PM    CPU    %user    %nice  %system  %iowait    %steal    %idle
07:22:05 PM    all      3.96      0.00      2.64      0.00      0.00    93.40
07:22:04 PM    IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s  rxcmp/s  txcmp/s  rxmcst/s
07:22:05 PM        lo    412.50    412.50    104.44    104.44      0.00      0.00      0.00
07:22:05 PM      eth0    13.75    12.50      1.32      1.26      0.00      0.00      0.00
07:22:05 PM      eth1    903.75    707.50    174.12    62.42      0.00      0.00      0.00
07:22:05 PM    CPU    %user    %nice  %system  %iowait    %steal    %idle
07:22:06 PM    all      5.25      0.00      4.46      2.10      0.00    88.19
07:22:05 PM    IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s  rxcmp/s  txcmp/s  rxmcst/s
07:22:06 PM        lo    849.41    849.41    154.54    154.54      0.00      0.00      0.00
07:22:06 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:22:06 PM      eth1  1287.06  1337.65    84.48    461.76      0.00      0.00      0.00
07:22:06 PM    CPU    %user    %nice  %system  %iowait    %steal    %idle
07:22:07 PM    all      1.85      0.00      1.06      0.00      0.00    97.09
07:22:06 PM    IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s  rxcmp/s  txcmp/s  rxmcst/s
07:22:07 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:22:07 PM      eth0      4.94      0.00      0.22      0.00      0.00      0.00      0.00
07:22:07 PM      eth1    97.53    19.75      4.32      3.18      0.00      0.00      0.00
07:22:07 PM    CPU    %user    %nice  %system  %iowait    %steal    %idle
07:22:08 PM    all      1.58      0.00      1.32      0.00      0.00    97.11
07:22:07 PM    IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s  rxcmp/s  txcmp/s  rxmcst/s 07:22:08 PM        lo      4.94      4.94      0.31      0.31      0.00      0.00      0.00
07:22:08 PM      eth0      1.23      0.00      0.06      0.00      0.00      0.00      0.00
07:22:08 PM      eth1    67.90    24.69      3.02      3.94      0.00      0.00      0.00 Average:        CPU    %user    %nice  %system  %iowait    %steal    %idle Average:        all      3.63      0.00      2.55      0.84      0.00    92.98
Average:        IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s  rxcmp/s  txcmp/s  rxmcst/s Average:          lo    212.61    212.61    50.54    50.54      0.00      0.00      0.00 Average:        eth0    42.79    41.70      3.27    41.84      0.00      0.00      0.00 Average:        eth1    492.48    432.48    53.63    110.40      0.00      0.00      0.00

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。