日期: 2021 年 6 月 10 日

AndroidStudio介绍,代理配置,特性,技巧及从eclipse迁移到as

前言:
Android Studio 是google官方正式开发Android应用程序的开发工具,这玩意是基于IntelliJ IDEA,AndroidStudio 提供如下功能:


    Flexible Gradle-based build system
    Build variants and multiple apk file generation
    Code templates to help you build common app features
    Rich layout editor with support for drag and drop theme editing
    lint tools to catch performance, usability, version compatibility, and other problems
    ProGuard and app-signing capabilities
    Built-in support for Google Cloud Platform, making it easy to integrate Google Cloud Messaging and App Engine
    And much more

 

简单说:
灵活的gradle编译系统
编译变量和多apk的生成(变量是指不同产品的标识,比如debug和release)
代码模板帮助我们构建具有相同特性的app
支持布局拖拽和主题编辑的布局编译器
line tools 工具
签名支持
google 云平台

For specific Android Studio how-to documentation, see the pages in the Workflow section, such as Managing Projects from Android Studio and Building and Running from Android Studio. For a summary of the latest changes to Android Studio, see the Android Studio Release Notes.

如果你用as做Android开发,可以看看这些workflow这部分文档,比如在as中管理工程,编译和运行app以及as的历史版本。


1,Project and File Structure 工程目录结构及对应的文件结构
这里写图片描述
Project 整个工程目录结构
Packages每个项的目目录结构,包含src和res
Android每个项目的目录结构,包含src,res, manifests和整体的gradle配置文件
2,Android Build System Android编译系统,也就是使用gradle

3,Debug and Performance 调试及各种性能工具

Android Studio provides a number of improvements to assist you in debugging and improving the performance of your code, including an improved virtual device management, inline debugging, and performance analysis tools.

4,Android Virtual Device (AVD) Manager 模拟器管理

5,Inline debugging 调试

6,Memory and CPU monitor 内存和cpu监听

7,Heap dump 内存镜像,可以看到内存的

8,Allocation tracker 内存分配和跟踪

9,Data file access 数据存储

10,Code inspections 代码检查及命令行模式

11,Annotations in Android Studio 注解包的依赖

12,Inferring nullability 在你使用分析工具的时候,null的验证
To run a nullability analysis in Android Studio, select the Analyze > Infer Nullity menu option. Android Studio inserts the Android @Nullable and @NonNull annotations in detected locations in your code. After running a null analysis, it’s good practice to verify the injected annotations.

13,Log messages log信息


AndroidStudio Configuration

SDK Manager 更新配置
Settings –>Appearance –>System Settings–> Updates

Update channels 更新渠道

Canary channel:  二进制
Dev channel:     开发
Beta channel:    测试
Stable channel:  稳定

这里写图片描述

Proxy Settings 代理配置:
这里写图片描述

For application-specific HTTP proxy settings, set the proxy settings in the build.gradle file as required for each application module.
每个app的配置:

apply plugin: 'com.android.application'

android {
    ...

    defaultConfig {
        ...
        systemProp.http.proxyHost=proxy.company.com
        systemProp.http.proxyPort=443
        systemProp.http.proxyUser=userid
        systemProp.http.proxyPassword=password
        systemProp.http.auth.ntlm.domain=domain
    }
    ...
}

 

For project-wide HTTP proxy settings, set the proxy settings in the gradle/gradle.properties file.
整个工程的配置:

# Project-wide Gradle settings.
...

systemProp.http.proxyHost=proxy.company.com
systemProp.http.proxyPort=443
systemProp.http.proxyUser=username
systemProp.http.proxyPassword=password
systemProp.http.auth.ntlm.domain=domain

systemProp.https.proxyHost=proxy.company.com
systemProp.https.proxyPort=443
systemProp.https.proxyUser=username
systemProp.https.proxyPassword=password
systemProp.https.auth.ntlm.domain=domain

...

 

Features
不做过多介绍:
Translations Editor i18N的适配编辑器
Android Wear and TV support 手环和tv开发的支持
Fingerprint Support 指纹识别的支持
Developer Services google 的开发服务

Ads using AdMob
Analytics Google Analytics
Authentication using Google Sign-in
Notifications using Google Cloud Messaging

 

Public and Private Resources 公用私有资源,这个值得研究

Tips and Tricks
开发技巧和秘籍:部分快捷键,反编译,注解,布局的所有机型视图

Migrating from Eclipse ADT
迁移工作,从eclipse迁移到AndroidStudio
Project Structure 工程目录:
整体对比:
这里写图片描述

目录结构对比图:

这里写图片描述这里写图片描述
这里写图片描述

Mainfest对比:
这里写图片描述

Application ID for package identification

apply plugin: 'com.android.application'

android {
   compileSdkVersion 19
   buildToolsVersion "19.1"

   defaultConfig {
       applicationId "com.example.my.app"
       minSdkVersion 15
       targetSdkVersion 19
       versionCode 1
       versionName "1.0"
   }
 ...

 

Build variants 不同包名打包配置:

productFlavors {
     pro {
          applicationId = "com.example.my.pkg.pro"
     }
     free {
          applicationId = "com.example.my.pkg.free"
     }
}

buildTypes {
    debug {
          applicationIdSuffix ".debug"
    }
}
....

 

Dependencies 依赖库

dependencies {
   /*  ,exclude: 'android-support-v13.jar'' */ /*哪个jar不被编译*/
   compile fileTree(dir: 'libs', include: ['*.jar'])
   /*compile files('libs/*.jar')*/
   compile 'com.android.support:appcompat-v7:22.0.0'
   // 可以不适用appcompat-v7
}

 

 // Module dependency  依赖库
    compile project(":lib")

    // Remote binary dependency
    compile 'com.android.support:appcompat-v7:19.0.1'

    // Local binary dependency  本地jar
    compile fileTree(dir: 'libs', include: ['*.jar'])

 

Gradle-based Build Process gradle 命令

assemble
assembleDebug
assembleRelease

 

直接在Terminal 中输入gradlew assemble
这个会下载对应的gradle版本:
对应的配置在 gradle\wrapper\gradle-wrapper.properties

#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip

 

如果想看所有的命令: Gradle 默认在右边
这里写图片描述

Using the Android Studio build system’s declarative logic
宏定义

def getVersionCode) {
      def code = …
      return code
}

android {
    defaultConfig {
        versionCode getVersionCode()
              …
    }
}

 

Resource Optimization res优化
Resource shrinking res缩减

android {
    ...

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
            'proguard-rules.pro'
        }
    }
}

Filtering language resources 语言资源过滤:
apply plugin: 'android'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        resConfigs "en", "de", "es" //Define the included language resources.
        resConfigs "mdpi", "hdpi"
    }
...

 

Files to ignore 忽略文件配置:

A number of Android Studio files are typically not added to version control as these are temporary files or files that get overwritten with each build. These files are listed in an exclusion file, such as .gitignore, for the project and each app module. Typically, the following files are excluded from version control:

.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures

91. 解码方法(JS实现)

91. 解码方法(JS实现)

1 题目
一条包含字母 A-Z 的消息通过以下方式进行了编码:
‘A’ -> 1
‘B’ -> 2

‘Z’ -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。
示例 1:
输入: “12”
输出: 2
解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。
示例 2:
输入: “226”
输出: 3
解释: 它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。

2 思路
这道题思路主要是考察动态规划,设d[i]为以索引号i为结尾的字符串所解码的总数,总体可以分为三种情况:1.当前位为0时。2. 当前位和前一位无法形成有效数字。3.当前位和前一位可以形成有效数字

3代码
/**
* @param {string} s
* @return {number}
*/
var numDecodings = function(s) {
if (s.length === 0 || s[0] === ‘0’) return 0;
if (s.length === 1) return 1;

const d = [1];

for (let i=1; i<s.length; i++) {
if (s[i] === ‘0’) { // 当前位为0
if (s[i-1] !== ‘1’ && s[i-1] !== ‘2’) { //无法连接前一位形成有效数字,返回0
return 0;
} else { //d[i-2]
d[i] = i > 1 ? d[i-2] : 1;
}
} else if (s[i-1] === ‘0’ || parseInt(s[i-1])*10 + parseInt(s[i]) > 26) { //前一位为0或当前位无法连接前一位
d[i] = d[i – 1];
} else { //当前位可以连接前一位
d[i] = d[i – 1] + (i > 1 ? d[i – 2] : 1);
}
}

return d[s.length – 1];
};

Android http proxy server 设置

在安装Android  studio SDK时经常遇到下面的情况

%title插图%num %title插图%num

 

点击图中的tool-Options,进入界面并进行设置如图

在Android SDKManager Setting 窗口设置HTTPProxy server和HTTPProxy Port这个2个参数,分别设置为:
HTTPProxy server:mirrors.neusoft.edu.cn
HTTP Proxy Port:80
然后把下面的Force ..http://…sourcesto be fetched using http://..选项打钩,close Android SDKManager Setting,然后在重新启动Android SDKManager.

%title插图%num

92. 反转链表 II(JS实现)

92. 反转链表 II(JS实现)

1 题目
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

2 思路
这道题思路主要是考察指针,并不是很难,只需要先找到要翻转元素的头和尾,然后头尾互换,并将其与原列表连接在一起,*后再翻转内部的元素即可

3代码
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} m
* @param {number} n
* @return {ListNode}
*/
var reverseBetween = function(head, m, n) {
if (!head || !head.next || m === n) return head;
let i = 1;
let rHead,rTail;

let linkHead = head;
while(head) { // 找到要翻转元素的头和尾
if (m === i) rHead = head;
if (n === i) {
rTail = head;
break;
}
if (head.next) head.next.prev = head;
head = head.next;
i++;
}

if (rHead.prev) { //将翻转后元素的头连接到原列表
rHead.prev.next = rTail;
} else {
linkHead = rTail;
}
rHead.next = rTail.next; //将翻转后元素的尾连接到原列表

i = n – m;
while(i > 0) { //将内部元素翻转
rTail.next = rTail.prev;
rTail = rTail.prev;
i–;
}

return linkHead;
};

93. 复原IP地址(JS实现)

93. 复原IP地址(JS实现)

1 题目
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。
示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]

2 思路
这道题思路主要是考察回溯和剪枝,逐步构造一棵树, 树的每层都对应ip地址的每一段,*好能到达叶子节点的路径就是符合的结果

3代码
/**
* @param {string} s
* @return {string[]}
*/
var restoreIpAddresses = function(s) {
if (s.length < 4 || s.length > 12) return [];

const result = [];

for (let i=1;i<4;i++) {
let str = s.substr(0, i);
if (parseInt(str) > 255 || str.length > 1 && str[0] === ‘0’) continue;
d([str], i, 1);
}

function d(arr, begin, depth) {
if (begin >= s.length) {
if (arr.length === 4) {
result.push(arr.join(‘.’));
}
return;
}

let leftLen = s.length – begin;
if (leftLen > (4 – depth) * 3) return; //当剩下的字符串长度已经超过*大长度,直接返回
for (let i=1;i<4 && i<=leftLen; i++) {
let str = s.substr(begin, i);
if (parseInt(str) > 255 || str.length > 1 && str[0] === ‘0’) continue; //若当前字符段不满足规则,则跳过
let temp = arr.slice();
temp.push(str);
d(temp, begin + i);
}
}

return result;
};

95. 不同的二叉搜索树 II(JS实现)

95. 不同的二叉搜索树 II(JS实现)

1 题目
给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。
示例:
输入:3
输出:
[
[1,null,3,2],
[3,2,null,1],
[3,1,null,null,2],
[2,1,3],
[1,null,2,null,3]
]
解释:
以上的输出对应以下 5 种不同结构的二叉搜索树:
1 3 3 2 1
\ / / / \
3 2 1 1 3 2
/ / \
2 1 2 3
提示:
0 <= n <= 8

2 思路
这道题思路可以用动态规划的思想来做,设d[i]为1…i的数组成的二叉搜索树解集,那么d[i+1]的解集可以从d[i]推出,即遍历d[i-1]中所有解集,每个解都是一棵二叉树,每颗树的右半部分(包括根节点)中的所有右节点,都可以取出作为新节点i的左子树,然后用新节点替换原来的右节点,就形成一颗新的二叉搜索树

3代码
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {number} n
* @return {TreeNode[]}
*/
var generateTrees = function(n) {
const d = [];
if (n === 0) return d;
d[1] = [new TreeNode(1)];
if (n === 1) return d[1];

for (let i=2; i<=n; i++) {
let res = [];
for (let j=0;j<d[i-1].length; j++) {
let node = d[i-1][j];

let p = node;
let stack = [];
while(p) { //将所有二叉树右半部分所有的右节点入栈
stack.push(p);
p = p.right;
}

let father;
while(stack.length > 0) {
addNode = new TreeNode(i);
p = stack.pop();
father = stack[stack.length – 1];
if (!p.right) { //如果是叶子节点
p.right = addNode;
res.push(deepCopy(node));
p.right = null; //这里要还原,以免改变了原来树的结构
}

addNode.left = p; //将当前右节点作为新节点的左子树
if (father) { //如果不是根节点
father.right = addNode; //替换当前的右节点
res.push(deepCopy(node));
father.right = p; //这里要还原,以免改变了原来树的结构
} else { //如果是根节点
res.push(addNode);
}
}

}
d[i] = res;
}

return d[n];

function TreeNode(val, left, right) {
this.val = (val===undefined ? 0 : val)
this.left = (left===undefined ? null : left)
this.right = (right===undefined ? null : right)
}

function deepCopy(node) {
return JSON.parse(JSON.stringify(node));
}
};

android studio 配置HTTP proxy

android studio 配置HTTP proxy

Android SDK在线更新镜像服务器
南阳理工学院镜像服务器地址:

mirror.nyist.edu.cn 端口:80

中国科学院开源协会镜像站地址:

IPV4/IPV6: mirrors.opencas.cn 端口:80

IPV4/IPV6: mirrors.opencas.org 端口:80

IPV4/IPV6: mirrors.opencas.ac.cn 端口:80

上海GDG镜像服务器地址:

sdk.gdgshanghai.com 端口:8000

北京化工大学镜像服务器地址:

IPv4: ubuntu.buct.edu.cn/ 端口:80

IPv4: ubuntu.buct.cn/ 端口:80

IPv6: ubuntu.buct6.edu.cn/ 端口:80

大连东软信息学院镜像服务器地址:

mirrors.neusoft.edu.cn 端口:80

腾讯Bugly 镜像:

android-mirror.bugly.qq.com 端口:8080

腾讯镜像使用方法:http://android-mirror.bugly.qq.com:8080/include/usage.html

在Androidstudio中设置的位置如下图所示:
在这里插入图片描述

ping 超时原因总结

通俗来讲就是说明你的网络连通不好,ping是对一个目标服务器发出数据包,并且请求获取反馈包的过程,如果发出了数据包,在指定时间内,无法得到获取反馈包,这证明你与该服务器的网络没有连通。

ping命令中请求超时原因分析:未连接上服务器,这是因为系统忙、网速慢、计算机系统资源不足等导致登陆超时均可出现您所述情况!

(1) 对方已关机,或者网络上根本没有这个地址

(2)对方与自己不在同一网段内,通过路由也无法找到对方,但有时对方确实是存在的,当然不存在也是返回超时的信息。

(3)对方确实存在,但设置了ICMP数据包过滤(比如防火墙设置)。

你会问怎样知道对方是存在,还是不存在呢,可以用带参数 -a 的Ping命令探测对方,如果能得到对方的NETBIOS名称,则说明对方是存在的,是有防火墙设置,如果得不到,多半是对方不存在或关机,或不在同一网段内。

(4)错误设置IP地址

正常情况下,一台主机应该有一个网卡,一个IP地址,或多个网卡,多个IP地址(这些地址一定要处于不同的IP子网)。但如果一台电脑的“拨号网络适配器”(相当于一块软网卡)的TCP/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这样,在IP层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机Ping其他的机器时,会存在这样的问题:

A.主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段。

B.主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去Ping其他机器,IP层协议会无法处理,超时后,

Ping 就会给出一个“超时无应答”的错误信息提示。但从其他主机Ping这台主机时,请求包从特定的网卡来,ICMP只须简单地将目的、源地址互换,并更改一些标志即可,ICMP应答包能顺利发出,其他主机也就能成功Ping通这台机器了。

2.Destination host Unreachable

(1) 对方与自己不在同一网段内,而自己又未设置默认的路由,比如上例中A机中不设定默认的路由,运行Ping 192.168.0.1.4就会出现“Destination host Unreachable”。

(2)网线出了故障

这里要说明一下“destination host unreachable”和 “time out”的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其他原因不可到达,这时候会出现“time out”,如果路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。

3.Bad IP address

这个信息表示您可能没有连接到DNS服务器,所以无法解析这个IP地址,也可能是IP地址不存在。

4.Source quench received

这个信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。

5.Unknown host–不知名主机

这种出错信息的意思是,该远程主机的名字不能被域名服务器(DNS)转换成IP地址。故障原因可能是域名服务器有故障,或者其名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。

6.No answer–无响应

这种故障说明本地系统有一条通向中心主机的路由,但却接收不到它发给该中心主机的任何信息。故障原因可能是下列之一:中心主机没有工作;本地或中心主机网络配置不正确;本地或中心的路由器没有工作;通信线路有故障;中心主机存在路由选择问题。

7.Ping 127.0.0.1:127.0.0.1是本地循环地址

如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作。

8.no rout to host:网卡工作不正常。

9.transmit failed,error code:10043网卡驱动不正常。

10.unknown host name:DNS配置不正确。

ping丢包故障处理方法

ping丢包故障处理方法

1. Ping丢包故障定位思路故障分析
Ping丢包是指Ping报文在网络中传输,由于各种原因(如线路过长、网络拥塞等)而产生部分Ping报文丢弃的现象。在使用Ping命令,出现Ping丢包的现象时,*步需要确定Ping丢包的网络位置,其次是确定Ping丢包的故障原因,然后依据定位的故障原因再进行解决。
确认Ping丢包的网络位置时一般采用逐段Ping的方法,可以将Ping丢包故障*终确定在直连网段之间。 确认Ping丢包的故障原因一般采用流量统计的方法,通过流量统计可以知道丢弃报文的具体位置、判断故障原因。
导致Ping丢包的原因非常多,也非常复杂,实际故障定位中需要综合考虑各种因素。本文档针对常见Ping丢包故障分析,总结出以下几种常见故障:
物理环境故障;网络环路;ARP问题;ICMP问题。
需要注意并不是Ping丢包就一定表示网络质量差,某些情况下虽然Ping丢包,但是业务是正常的。分析Ping丢包时注意以下两点:
当设备对报文进行硬件转发,速度非常快,就不会丢包。例如,Ping设备端口下挂的电脑。当报文需要CPU进行处理时,CPU繁忙就会丢包。例如:Ping设备上的IP地址。
为了防止网络×××对设备造成影响,设备具有CPU保护功能,对于超过CPCAR(Control Plane Committed Access Rate)值的ARP、ICMP等报文进行丢弃,造成Ping丢包现象。此种现象不影响业务的正常运行。

2. Ping丢包故障定位
ping丢包故障处理方法
图1 Ping测试组网图
如上图1所示,以一个Ping丢包实例,介绍Ping丢包故障定位。

3. Ping丢包故障现象
C:\Users> ping -n 100 192.168.4.41
正在 Ping 192.168.4.41 具有 32 字节的数据:
请求超时。
请求超时。
来自 192.168.4.41 的回复: 字节=32 时间<1ms TTL=128

来自 192.168.4.41 的回复: 字节=32 时间<1ms TTL=128
192.168.4.41 的 Ping 统计信息:
数据包: 已发送 = 100,已接收 = 80,丢失 = 20 (20% 丢失),
往返行程的估计时间(以毫秒为单位):
*短 = 0ms,*长 = 0ms,平均 = 0ms

4. Ping丢包故障定位
依据故障发生的可能原因进行故障定位,故障定位方法如下:
1、配置Ping多包。
为了持续复现丢包现象,以便于故障处理,需要持续发送Ping报文。可以配置Ping的-c count参数,发送多个Ping报文。
2、缩小故障范围。
当在PC上直接Ping IP地址192.168.4.41丢包时,直接判定故障出现的原因将非常的困难。此时可以先缩小故障范围,在PC上分别Ping SwitchA、SwitchB、SwitchC和SwitchD,通过Ping结果可以判断出哪一段网络出现故障。本例假设PC上Ping SwitchB时也出现丢包,则可以初步判断丢包发生在SwitchA和SwitchB直连网段之间。
3、配置流量统计。
通过缩小故障范围*终将故障定位在SwitchA和SwitchB之间,为了进一步确认故障点,需要在SwitchA和SwitchB上配置流量统计功能,观察丢包情况。具体理论统计配置方法请参考各设备的说明手册。
4、分析统计结果。
在SwitchA上持续Ping SwitchB。
如果离开SwitchA的报文数目多余进入SwitchB的报文数目,说明传输链路上存在丢包,请依照后面介绍的物理链路故障引起ping丢包进行处理。
如果离开SwitchA的报文数目等于进入SwitchB的报文数目,但是离开SwitchB的报文数目少于进入SwitchB报文数目,说明SwitchB上存在丢包。引起SwitchB设备丢包可能原因分为网络环路和ICMP问题。
登录设备,续查看CPU和接口利用率是否很高、查看是否出现MAC地址漂移。如果出现利用率高或MAC地址漂移现象,请依照后面的网络环路引起ping丢包进行处理。
登录设备,查看是否有ICMP报文被丢弃、查看ICMP报文限速的配置是否过小。如果出现报文被丢弃或ICMP报文限速配置得很小,请依照后面介绍的ICMP问题引起ping丢包进行处理。
如果离开SwitchA的报文数目少于Ping发送的报文数目,说明SwitchA上丢包。引起SwitchA丢包可能原因分为网络环路和ARP问题。
登录设备,查看CPU和接口利用率的情况,查看是否出现MAC地址漂移,如果出现利用率高或MAC地址漂移现象,请依照后面介绍的网络环路引起ping丢包进行处理。
登录设备,查看是否有ARP报文被丢弃。如果出现报文被丢弃现象,请依照后面介绍的ARP问题引起ping丢包进行处理。

5. 物理链路故障引起ping丢包分析
通过Ping丢包故障定位思路可以判断出是否由于物理链路故障引起的丢包。物理链路故障常见以下原因:
计算机网卡有问题、设备接口不正常、线缆接头接触不良或松脱、网线过长或出现破损、光纤弯曲度过大、光模块收发的光功率过低、电口协商不一致,如一端自协商一端非自协商。
在实际环境中设备未接地导致静电不能释放、风扇损坏导致设备过热等物理环境问题也会引起Ping丢包。
物理链路故障可以通过观察发现,如光纤弯曲度过大、物理连接线过长、设备或者电脑网卡指示灯显示不正常等。针对物理链路故障,故障的解决的办法一般是更换物理器件,器件更换后故障即可恢复。

6. 网络环路故障引起ping丢包分析
以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。网络环路会导致设备CPU和端口利用率高,Ping报文被丢弃。
当设备处于存在环路的网络中,设备的反应速度比较缓慢。环路问题判断方法如下:
1、通过display interface brief | include up命令,查看所有UP接口下的流量,存在环路的接口上InUti和OutUti两个计数会逐步增加,甚至到接近100%,远远超过业务流量。
*次查询:
<SwitchA> display interface brief | include up

Interface PHY Protocol InUti OutUti inErrors outErrors
GigabitEthernet0/0/2 up up 0.56% 0.56% 0 0

第二次查询:
<SwitchA> display interface brief | include up

Interface PHY Protocol InUti OutUti inErrors outErrors
GigabitEthernet0/0/1 up up 76% 76% 0 0

2、判断交换机是否存在MAC地址漂移。
可以执行display trapbuffer命令,查看MAC地址漂移的日志来判断。
可以执行mac-address flapping detection命令配置MAC地址漂移检测功能,然后通过display mac-address flapping record命令来判断是否出现MAC地址漂移。
可以多次执行display mac-address来观察,若MAC地址在交换机不同的接口学习到,则存在mac地址漂移。
3、检查CPU的利用率。
通过命令display cpu-usage查看CPU的利用率。网络环路会导致CPU利用率一直很高,Ping报文未来得及处理就被丢弃。
解决此种Ping丢包问题的方法是破除网络环路,可以在设备上部署RRPP、SEP、Smart Link、STP/RSTP/MSTP等协议,对环路进行处理。

7. ARP问题故障引起ping丢包分析
通过前面介绍的Ping丢包故障定位思路断是否由于ARP问题导致Ping丢包。ARP问题常见故障现象:开始(由于ARP学习失败)出现Ping丢包,然后(学习到ARP)在一段时间内(ARP表项老化时间)无丢包现象,后续(再出现ARP学习失败)会继续出现丢包。
常见ARP问题有以下两种:
设备配置了ARP安全功能,如ARP Miss的源抑制、ARP速率抑制等,会导致ARP学习很慢,Ping丢包。 设备受到ARP报文×××,上送CPU的ARP报文数超过CPCAR值,导致部分ARP报文被丢弃,Ping丢包。
常见问题判断及解决方法如下:
通过display arp packet statistics命令,查看是否有ARP报文被丢弃,分析设备上ARP安全的配置情况,从而判断问题的原因。对于该问题需要重新配置ARP安全,使设备能够正常的处理ARP报文。
通过display cpu-defend statistics命令,查看CPU对于ARP报文处理情况,是否存在报文丢弃。
对于该问题需要检查设备是否受到ARP×××,正确配置ARP安全来防范×××,同时增加ARP报文的CPCAR值。配置样例如下:
<SwitchA> system-view
[SwitchA] cpu-defend policy arp
[SwitchA-cpu-defend-policy-arp] car packet-type arp-reply cir 32
Warning: Improper parameter settings may affect stable operating of the system. Use this command under assistance of Huawei engineers. Continue? [Y/N]:y
[SwitchA-cpu-defend-policy-arp] car packet-type arp-request cir 32
Warning: Improper parameter settings may affect stable operating of the system. Use this command under assistance of Huawei engineers. Continue? [Y/N]:y
[SwitchA-cpu-defend-policy-arp] quit
[SwitchA] cpu-defend-policy arp global

8. ICMP问题故障引起ping丢包分析
ICMP问题常见故障现象:
Ping设备时,一旦Ping速度比较快就会丢包,速度慢下来就不会丢包。 Ping大包时出现规律性丢包。 Ping设备时,会出现Ping通几个报文后Ping不通,大约两分钟左右又可以Ping通,Ping通几个报文后又Ping不通。
常见ICMP问题有以下三种:
设备受到ICMP报文×××,上送CPU的ICMP报文数超过CPCAR值,导致部分ICMP报文被丢弃,Ping丢包。 设备配置ICMP×××防范,超过速度限制的ICMP报文被丢弃,Ping丢包。 设备配置ICMP限速功能,超过速度限制的ICMP报文被丢弃,Ping丢包。
常见问题判断及解决方法如下:
1、通过display icmp statistics和display anti-attack statistics icmp-flood命令查看是否有ICMP报文被丢弃。
对于该问题需要重新配置ICMP安全,使设备能够正常的处理ICMP报文。
2、检查icmp rate-limit total threshold threshold-value命令的配置情况,了解ICMP流量限速的阈值。
如果阈值过小,则可通过icmp rate-limit total threshold threshold-value命令进行修改,使其允许更多的ICMP报文通过。配置样例如下:
<SwitchA> system-view
[SwitchA] icmp rate-limit enable
[SwitchA] icmp rate-limit total threshold 500
3、通过display cpu-defend statistics packet-type icmp all命令,查看CPU对于ICMP报文处理情况,是否存在报文丢弃。
对于该问题需要检查设备是否受到ICMP×××,正确配置ICMP安全来防范×××,同时增加ICMP报文的CPCAR值。ICMP报文的CPCAR值配置样例如下:
<SwitchA> system-view
[SwitchA] cpu-defend policy icmp
[SwitchA-cpu-defend-policy-icmp] car packet-type icmp cir 256
Warning: Improper parameter settings may affect stable operating of the system. Use this command under assistance of Huawei engineers. Continue? [Y/N]:y
[SwitchA-cpu-defend-policy-icmp] quit
[SwitchA] cpu-defend-policy icmp global
还可以通过icmp-reply fast命令使能Ping快回功能来解决CPU丢弃ICMP报文故障。

关于ping公司内网服务器ip,间歇性丢包的解决方案

遇到现象:用公司内网登录服务器ip,刷新卡,速度慢。

测试:
1. 服务器本地卡不卡,如果是服务器本身卡,那就对使用的服务器上的平台进行调整,比如,使用tomcat,那就调整一下tomcat的内存,这样可以解决服务器本身卡的问题。
2. 若不是服务器本身卡,那就是网络的原因。ping ip -t -l 1000,先对服务器发1000字节的包,看看返回时间和掉包率,若发现掉包现象严重,排除中毒之外的因素,就是我们处理一般情况的解决方案。

解决方案:把这台电脑的速度和双工设置为为10M全双工,设置方法:本地连接-属性-配置-高级-速度和双工,选择10M全双工,能好那么一些。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速