您的位置:首页 > 运维架构 > Shell

android adb shell 查询进程流量情况

2016-01-19 14:47 791 查看
        本文仅仅是通过adb查询应用的流量使用情况。当然在Android应用程序的Java代码中同样可以获得应用的流量使用情况。

1、获得应用的Pid。

      可以通过adb shell ps获得所有进程信息,里面当然包含应用的pid和包名。然后对返回信息进行查找(按包名查找)。

2、获得应用的Uid.

      Android系统的目录文件/proc/pid/status(注意:标红的pid是第1步中获得的pid,是一个大于0的数字)中包含关于uid的信息。以pid=7328为例,通过adb shell cat
/proc/7328/status可以得到以下信息:

1|shell@p1:/ $
cat /proc/7328/status

cat /proc/7328/status

Name:   .qihoo.secstore

State:  S (sleeping)

Tgid:   7328

Pid:    7328

PPid:   479

TracerPid:      0
Uid:    10194   10194   10194   10194

Gid:    10194   10194   10194   10194

FDSize: 128

Groups: 1015 1028 3001 3002 3003 9997 50194

VmPeak:  1828500 kB

VmSize:  1709912 kB

VmLck:         0 kB

VmPin:         0 kB

VmHWM:    123552 kB

VmRSS:     62932 kB

VmData:   186776 kB

VmStk:      8192 kB

VmExe:        12 kB

VmLib:     87568 kB

VmPTE:       716 kB

VmSwap:    21692 kB

Threads:        44

SigQ:   0/9853

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000001a04

SigIgn: 0000000000000000

SigCgt: 00000002000094f8

CapInh: 0000000000000000

CapPrm: 0000000000000000

CapEff: 0000000000000000

CapBnd: 0000000000000000

Cpus_allowed:   3f

Cpus_allowed_list:      0-5

voluntary_ctxt_switches:        5671

nonvoluntary_ctxt_switches:     4188

     

     解析以上信息即可得到Uid.

3、读取流量值。

      Android系统的目录文件/proc/uid_stat/uid/下一般会有两个文件tcp_snd和tcp_rcv。(注意:标红的uid是第二步中获得的Uid数值)。通过adb shell cat
/proc/uid_stat/10194/tcp_snd和adb shell cat
/proc/uid_stat/10194/tcp_rcv即可分别获得上行流量和下行流量。

shell@p1:/ $
ls /proc/uid_stat/10194

ls /proc/uid_stat/10194

tcp_rcv

tcp_snd

shell@p1:/ $

shell@p1:/ $ cat /proc/uid_stat/10194/tcp_snd

cat /proc/uid_stat/10194/tcp_snd

36006

shell@p1:/ $ cat /proc/uid_stat/10194/tcp_rcv

cat /proc/uid_stat/10194/tcp_rcv

41460

注意:

1、这里的值的单位是Byte字节,并且是累积量

2、有的应用是没有tcp_snd和tcp_rcv这两个文件的,比如某些系统应用。

3、某些没有流量交换的应用的可能也没有这两个文件,或者这两个文件里没有数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息