网络流量统计方法

  • 从WiFi固件统计

cat /sys/kernel/debug/ieee80211/phy0/ath10k/fw_stats

             ath10k PDEV stats
             =================

           Channel noise floor       -100
              Channel TX power         46
                TX frame count     701544
                RX frame count  128183681
                RX clear count  126990546
                   Cycle count 2308131819
               PHY error count     435167
                 RTS bad count          5
                RTS good count        475
                 FCS bad count     158640
               No beacon count          0
                 MIB int count          4


          ath10k PDEV TX stats
             =================

            HTT cookies queued     479781
             HTT cookies disp.     479781
                   MSDU queued     481538
                   MPDU queued     481538
                 MSDUs dropped          0
                  Local enqued       1794
                   Local freed       1794
                     HW queued      40238
                  PPDUs reaped      40238
                 Num underruns          0
                 PPDUs cleaned          0
                  MPDUs requed       8348
             Excessive retries        106
                       HW rate          3
            Sched self tiggers          0
     Dropped due to SW retries          0
       Illegal rate phy errors          0
        Pdev continuous xretry          0
                    TX timeout          0
                   PDEV resets          3
                  PHY underrun          0
  MPDU is more than txop limit          0

          ath10k PDEV RX stats
             =================

         Mid PPDU route change          5
       Tot. number of statuses     944323
        Extra frags on rings 0          0
        Extra frags on rings 1        140
        Extra frags on rings 2        194
        Extra frags on rings 3          0
        MSDUs delivered to HTT     944323
        MPDUs delivered to HTT     944323
      MSDUs delivered to stack     315885
      MPDUs delivered to stack     315885
               Oversized AMSUs          0
                    PHY errors     189734
              PHY errors drops     415029
   MPDU errors (FCS, MIC, ENC)     593675

             ath10k VDEV stats (0)
             =================


             ath10k PEER stats (3)
             =================

              Peer MAC address 02:f0:21:39:08:61
                     Peer RSSI 0
                  Peer TX rate 0
                  Peer RX rate 0
              Peer RX duration 0

              Peer MAC address 02:f0:21:38:fc:51
                     Peer RSSI 43
                  Peer TX rate 526500
                  Peer RX rate 780000
              Peer RX duration 0

              Peer MAC address 02:f0:21:39:08:5f
                     Peer RSSI 51
                  Peer TX rate 780000
                  Peer RX rate 526500
              Peer RX duration 0
  • 从网口统计

ethtool -S mesh0

 NIC statistics:
     rx_packets: 3684
     rx_bytes: 355068
     rx_duplicates: 0
     rx_fragments: 2942
     rx_dropped: 11
     tx_packets: 123
     tx_bytes: 15236
     tx_filtered: 0
     tx_retry_failed: 0
     tx_retries: 0
     sta_state: 0
     txrate: 0
     rxrate: 0
     signal: 0
     channel: 5745
     noise: 155
     ch_time: 235592
     ch_time_busy: 36611
     ch_time_ext_busy: 18446744073709551615
     ch_time_rx: 1162

ifconfig -a

mesh0     Link encap:Ethernet  HWaddr 02:F0:21:39:08:61  
          inet addr:172.168.8.97  Bcast:172.168.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2373 errors:0 dropped:931 overruns:0 frame:0
          TX packets:143 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:228022 (222.6 KiB)  TX bytes:18989 (18.5 KiB)

bmon bmon 是类 Unix 系统中一个基于文本,简单但非常强大的 网络监视和调试工具[1]

https://linux.die.net/man/1/bmon

https://blog.csdn.net/xungjhj/article/details/70186568

这里写图片描述

bmon 支持从多种输入拿数据, 支持多种输出形式. 

bmon -o ascii -r 5 每5秒钟输出一次ascii格式

Interfaces                               RX bps         pps      %    TX bps         pps      %
  lo                                          0           0                0           0       
   qdisc none (noqueue)                       0           0                0           0       
  enp0s31f6                                   0           0                0           0       
   qdisc none (pfifo_fast)                    0           0                0           0       
Interfaces                               RX bps         pps      %    TX bps         pps      %
  lo                                          0           0                0           0       
   qdisc none (noqueue)                       0           0                0           0       
  enp0s31f6                                1.81KiB        8              561B          3       
   qdisc none (pfifo_fast)                    0           0              548B          3

nload

https://github.com/rolandriegel/nload

Device enp0s31f6 [192.168.71.31] (1/2):

Incoming:

Curr: 2.19 kBit/s
Avg: 2.19 kBit/s
Min: 2.19 kBit/s
Max: 2.19 kBit/s
Ttl: 3.55 GByte

Outgoing:

Avg: 0.00 Bit/s
Min: 0.00 Bit/s
Max: 0.00 Bit/s
Ttl: 2.51 GByte

vnstat

  • 从IP层统计

    iftop 支持通信IP双向统计通信量的大小,并且按照通信量的大小从高到低排列.

  • 从应用层统计

    netstat -atup
    ps -ef | grep PID

thomas@PC3039:/media/thomas/ssd/workspace/iw-4.7$ netstat -atup
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:46473                 *:*                     LISTEN      -               
tcp        0      0 *:netbios-ssn           *:*                     LISTEN      -               
tcp        0      0 *:sunrpc                *:*                     LISTEN      -               
tcp        0      0 *:ssh                   *:*                     LISTEN      -               
tcp        0      0 localhost:ipp           *:*                     LISTEN      -               
tcp        0      0 *:48763                 *:*                     LISTEN      -               
tcp        0      0 *:6653                  *:*                     LISTEN      -               
tcp        0      0 *:microsoft-ds          *:*                     LISTEN      -               
tcp        0      0 *:44321                 *:*                     LISTEN      -               
tcp        0      0 *:nfs                   *:*                     LISTEN      -               
tcp        0      0 localhost:5345          *:*                     LISTEN      -               
tcp        0      0 *:46051                 *:*                     LISTEN      -               
tcp        0      0 *:55432                 *:*                     LISTEN      14647/node      
tcp        0      0 bogon:46070             40.112.187.188:https    ESTABLISHED 8019/thomas --pid=8
^C
thomas@PC3039:/media/thomas/ssd/workspace/iw-4.7$ ps -ef | grep 8019
thomas    8019  2094  0 516 ?       00:05:36 /snap/skype/30/usr/share/skypeforlinux/skypeforlinux --executed-from=/home/thomas --pid=8004
<think>好的,用户遇到了Jackson的MismatchedInputException异常,无法将字符串值反序列化到PictureUploadRequest对象。首先,我需要回顾之前提供的解决方案,并结合用户这次的具体错误来调整建议。 用户提到的错误信息是“无法从字符串值反序列化”,这可能意味着传入的JSON结构不符合预期。根据引用内容,用户提供的代码示例中可能尝试将纯字符串(如"test.jpg")而非对象结构解析到目标类。例如,引用[2]中提到,当JSON结构是{value:{}}而目标字段是String类型时,会抛出异常,这与当前情况类似。 接下来,我需要检查用户提供的PictureUploadRequest类的结构。假设用户可能没有为这个类定义无参构造函数,或者JSON中的键名与类的字段不匹配。根据之前的解决方案,添加无参构造函数或使用@JsonCreator注解的构造函数是关键。另外,引用[3]提到了使用@JsonDeserialize来处理自定义反序列化,但可能用户的情况不需要这么复杂,除非有特殊需求。 用户提供的引用[1]中的代码示例是正确使用readValue方法从文件反序列化对象,所以需要确认用户是否在代码中正确使用了ObjectMapper,并且文件路径或JSON内容正确。如果JSON文件的内容是字符串而不是对象,就会导致MismatchedInputException。 另外,引用[2]的问题是关于将嵌套对象反序列化为String字段的情况,用户可能需要检查是否JSON中包含嵌套结构,而目标字段是String类型,导致类型不匹配。这时可能需要调整类的字段类型,或使用自定义反序列化器。 总结可能的解决步骤:首先确保JSON是对象结构而非纯字符串,检查目标类的构造函数和字段映射,验证JSON数据结构,配置ObjectMapper忽略未知属性,以及处理可能的嵌套结构或类型不匹配问题。需要将这些步骤以清晰的方式呈现给用户,并结合之前的引用内容提供具体示例,帮助用户逐步排查问题。</think>针对 Jackson 的 `MismatchedInputException` 异常(具体表现为无法将字符串值反序列化为 `PictureUploadRequest` 对象),以下是结合引用内容和系统级知识的解决方案: --- ### 核心原因 当 JSON **输入数据格式**与目标 Java 类结构**不匹配**时触发该异常。根据引用[2]的描述,可能情景包括: 1. JSON 是纯字符串而非对象结构(如 `"test.jpg"`) 2. JSON 字段类型与目标类字段类型不兼容(如将 JSON 对象映射到 `String` 字段) 3. 目标类缺少必要的构造函数或字段映射配置 --- ### 解决方案分步说明 #### 步骤1:验证输入 JSON 格式 根据引用[1]的 `readValue` 方法示例,确保待解析的 JSON 是**对象结构**而非纯字符串: ```json // ✅ 正确格式(对象结构) { "fileUrl": "https://www.codefather.cn/logo.png" } // ❌ 错误格式(纯字符串) "https://www.codefather.cn/logo.png" ``` 若 JSON 是纯字符串,需: - 调整数据源输出格式 - 或修改目标字段类型为 `String`(引用[2]的典型场景) --- #### 步骤2:检查类构造函数 根据引用[1]的反序列化原理,确认 `PictureUploadRequest` 类满足以下条件之一: 1. **无参构造函数**(推荐): ```java public class PictureUploadRequest { public PictureUploadRequest() {} // 显式声明无参构造 } ``` 2. **带 `@JsonCreator` 注解的构造函数**(复杂对象): ```java public class PictureUploadRequest { private String fileUrl; @JsonCreator public PictureUploadRequest(@JsonProperty("fileUrl") String fileUrl) { this.fileUrl = fileUrl; } } ``` --- #### 步骤3:验证字段映射 通过引用[3]的 `@JsonDeserialize` 思路,检查字段名称匹配性: ```java public class PictureUploadRequest { // JSON键名必须为fileUrl(或通过@JsonProperty重命名) private String fileUrl; // 若JSON键名与字段名不一致时: @JsonProperty("file_url") private String fileUrl; } ``` --- #### 步骤4:配置 ObjectMapper 参考引用[1]的 `ObjectMapper` 使用方式,添加容错配置: ```java ObjectMapper mapper = new ObjectMapper(); // 忽略未知字段(避免因多余字段报错) mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 允许空字符串映射为null mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true); ``` --- ### 验证示例 假设 JSON 输入为: ```json { "fileUrl": "https://www.codefather.cn/logo.png" } ``` 反序列化代码应如下: ```java String json = "{\"fileUrl\":\"https://www.codefather.cn/logo.png\"}"; PictureUploadRequest request = mapper.readValue(json, PictureUploadRequest.class); ``` --- ### 特殊场景处理 #### 场景1:JSON值为嵌套对象但字段为String类型 若 JSON 包含嵌套对象(如 `{"value":{}}`),但目标字段是 `String` 类型: ```java // ✅ 解决方案:使用@JsonRawValue注解(引用[3]) public class RequestResult { @JsonRawValue // 将嵌套对象序列化为原始字符串 private String value; } ``` #### 场景2:强制转换非对象JSON 若必须将纯字符串反序列化为对象(不推荐),需自定义反序列化器: ```java public class StringToObjectDeserializer extends StdDeserializer<PictureUploadRequest> { public StringToObjectDeserializer() { super(PictureUploadRequest.class); } @Override public PictureUploadRequest deserialize(JsonParser p, DeserializationContext ctxt) { String value = p.getText(); return new PictureUploadRequest(value); // 手动构建对象 } } // 使用注解绑定 public class PictureUploadRequest { @JsonDeserialize(using = StringToObjectDeserializer.class) private String fileUrl; } ``` --- ### 错误排查表 | 现象 | 检查点 | 解决方案 | |------|--------|----------| |`Cannot construct instance`|类是否缺少无参构造|添加`public PictureUploadRequest()`| |`Unrecognized field "xxx"`|JSON包含未声明字段|配置`FAIL_ON_UNKNOWN_PROPERTIES=false`| |`Cannot deserialize value of type`|字段类型不匹配|检查类型定义或使用`@JsonDeserialize`| ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值