Linux常用命令-云计算篇-100%亲测超详细讲解

2023-11-03

推荐不错的学习地址  https://jingyan.baidu.com/article/f96699bb168d75894f3c1b5d.html

推荐参考资料 但他写的不太对  利用shell脚本监控linux中CPU、内存和磁盘利用率  

k8s学习资料

Kubernetes 文档 | Kubernetes

Kubernetes(k8s)中文文档 名词解释:DaemonSet_Kubernetes中文社区

49. linux(centos)测试带宽

centos测试带宽

1.安装speedtest-cli

speedtest-cli是一个用Python编写的轻量级Linux命令行工具,在Python2.4至3.4版本下均可运行。它基于Speedtest.net的基础架构来测量网络的上/下行速率。安装speedtest-cli很简单——只需要下载其Python脚本文件。

 2.下载并授权

wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py

chmod +rx speedtest.py

sudo mv speedtest.py /usr/local/bin/speedtest-cli

sudo chown root:root /usr/local/bin/speedtest-cli

使用speedtest-cli测试网速

使用speedtest-cli命令也很简单,它不需要任何参数即可工作。

speedtest-cli

输入这个命令后,它会自动发现离你最近的Speedtest.net服务器(地理距离),然后打印出测试的网络上/下行速率。

speedtest-cli --bytes以字节计算的方式来测试上下行速度
speedtest-cli --share将速度测试的结果生成一张图片的连接,便于你分享
speedtest-cli --simple只显示ping和上下行速度
speedtest-cli --list 列出speedtest.net所有的服务器距离你的物理距离,单位是千米(km)
 

4.执行speedtest-cli --share,在浏览器请求http连接,如下所示

复制share results的链接,在浏览器打开

查看帮助信息:

speedtest-cli -h

48. [root@ceph-0 ~]# ceph osd df /ceph osd dump检查osd利用率

#!/bin/sh
ceph osd tree | gawk '{ print strftime("%b %d %H:%M:%S,control1,ceph-tree,info,bash:"), $0 }'
ceph osd df | gawk '{ print strftime("%b %d %H:%M:%S,contro1,ceph-df,info,bash:"), $0 }'

47. 容器资源 > 存储管理 > 存储类

分布式存储类配置文件

{
  "kind": "StorageClass",
  "apiVersion": "storage.k8s.io/v1",
  "metadata": {
    "name": "managed-nfs-storage",
    "selfLink": "/apis/storage.k8s.io/v1/storageclasses/managed-nfs-storage",
    "uid": "03e54050-9cc4-454d-884d-a902ae25f68c",
    "resourceVersion": "1766",
    "creationTimestamp": "2021-10-28T08:51:14Z",
    "annotations": {
      "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"storage.k8s.io/v1\",\"kind\":\"StorageClass\",\"metadata\":{\"annotations\":{},\"name\":\"managed-nfs-storage\"},\"parameters\":{\"archiveOnDelete\":\"false\"},\"provisioner\":\"fuseim.pri/ifs\"}\n",
      "storageclass.kubernetes.io/is-default-class": "true"
    }
  },
  "provisioner": "fuseim.pri/ifs",
  "parameters": {
    "archiveOnDelete": "false"
  },
  "reclaimPolicy": "Delete",
  "volumeBindingMode": "Immediate"
}

本地存储卷yaml配置文件

{
  "kind": "StorageClass",
  "apiVersion": "storage.k8s.io/v1",
  "metadata": {
    "name": "local-storage",
    "selfLink": "/apis/storage.k8s.io/v1/storageclasses/local-storage",
    "uid": "051f99cb-eb0a-4ca0-b0e4-761f0fc07059",
    "resourceVersion": "2612708",
    "creationTimestamp": "2021-11-03T06:00:05Z",
    "annotations": {
      "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"storage.k8s.io/v1\",\"kind\":\"StorageClass\",\"metadata\":{\"annotations\":{},\"name\":\"local-storage\"},\"provisioner\":\"kubernetes.io/no-provisioner\",\"reclaimPolicy\":\"Delete\",\"volumeBindingMode\":\"WaitForFirstConsumer\"}\n"
    }
  },
  "provisioner": "kubernetes.io/no-provisioner",
  "reclaimPolicy": "Delete",
  "volumeBindingMode": "WaitForFirstConsumer"
}

查看服务器存储类

[root@node1 ~]# kubectl get sc managed-nfs-storage -o yaml

或者
[root@node1 ~]# kubectl get storageclass managed-nfs-storage -o yaml

[root@node3 ~]# kubectl get storageclass managed-nfs-storage -o yaml  查看配置文件
[root@node1 ~]# kubectl edit storageclass managed-nfs-storage   编辑配置文件

46. 智能运维-日志中心 查找某段时间内的日志

host

[root@control3 log]# sed -n '/^Oct 29 19:26:01/,/^Oct 29 19:26:52/p' /var/log/messages | grep 'argument'

[root@control3 log]# sed -n '/^Oct 29 19:46:10/,/^Oct 29 19:47:01/p' /var/log/messages

统计字符出现的次数

:%s/Oct 29 19:50:22//gn

k3s

[root@k3sserver-1 ~]# grep '2021-10-29T20:24:38.' /var/lib/rancher/k3s/agent/containerd/containerd.log |wc -l

mec-engine 

[root@engine ~]# grep '2021-10-29 20:26:02' /var/log/mec-engine/engine.log|wc -l
[root@engine ~]# grep '2021-10-29 20:26:02' /var/log/mec-engine/engine.log

45. 边缘端资源管理 > 虚拟机资源 > 存储管理 > 磁盘

1> ssh 10.121.xx.xx 登录到k3s的物理节点

物理机显示虚拟机列表   

virsh list

2> mount -> 172.xx:/ on /rhev/data-center/mnt/172.xx.xx:_ type ceph (rw,relatime,name=xx,secret=<hidden>,acl,mds_namespace=cephfs)

3> ssh 172.xx.xx 不需要密码

4> ceph osd pool ls  一个ceph集群可以有多个pool,查看ceph池子列表

fs_date

fs_date1

volumes 很多服务在volumes上面

images

backups

vms

kubernetes

5> 查看磁盘列表

rbd -p volumes ls

6> 查看磁盘详情

rbd -p volumes info volume-81229f81-27fa-4fb0-86d0-e43d1aaa59fa

44. 前端公钥加密,后端私钥解密

1 客户端输入口令点击登录,触发获取加密公钥

2 后端调用API返回公钥

3 客户终端使用公钥加密明文密码

4 后端调用API解密密文

java AES实现

43. # 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间

kubectl get pod

kubectl get pod -n kube

kubectl get pod -o wide

kubectl get pod -n logging

查看elasticsearch 前端方法:

1. 登陆MEPM/CMO后端

2. 找到对应的域名: kubectl get ingress -A|grep logging

3. 找到对应的端口: kubectl get svc -A|grep elastic

4. 拼接前端: <域名>:<端口>

[root@node1 ~]# kubectl get ingress -A|grep logging   找到对应的域名
logging       elasticsearch-ingress   elasticsearch.xx.xx.com                       ip   80        3h57m
[root@node1 ~]# kubectl get svc -A|grep elastic           找到对应的端口
logging    elasticsearch-logging     ClusterIP     ip    <none>       9200/TCP,9300/TCP  3h57m
logging    elasticsearch-logging-outer   NodePort   ip  <none>        9200:30200/TCP   3h57m
[root@node1 ~]# kubectl get pod -n logging
NAME                                 READY   STATUS      RESTARTS   AGE
elasticsearch-logging-0              1/1     Running     0          3h55m
elasticsearch-logging-1              1/1     Running     0          3h57m
elasticsearch-logging-2              1/1     Running     0          3h57m
fluentd-logging-es-2.8.0-99zcw       2/2     Running     1          3h52m
fluentd-logging-es-2.8.0-wdclz       2/2     Running     1          3h52m
fluentd-logging-es-2.8.0-zgd52       2/2     Running     1          3h52m
log-init-job-8j8dp                   0/1     Completed   0          3h49m
logservice-logging-b4ff66654-fl9xt   1/1     Running     0          3h50m
logservice-logging-b4ff66654-qnc64   1/1     Running     0          3h50m
logservice-logging-b4ff66654-qzxw7   1/1     Running     0          3h50m
[root@node1 ~]# kubectl get cm -n logging  查看配置文件
NAME                           DATA   AGE
elasticsearch-logging-config   6      3h57m
fluentd-logging-config         7      3h57m
log-init-logging-config        5      3h57m
logservice-logging-config      5      3h57m
[root@node1 ~]# kubectl edit cm logservice-logging-config -n logging   编辑配置文件
Edit cancelled, no changes made.

查看 ConfigMap

kubectl get cm <ConfigMap Name>

修改 ConfigMap 

kubectl edit cm <ConfigMap Name>

42. 比如一个虚拟机 磁盘是100G  预估的分析是10天的数据,每天按照10G消耗,呈现线型上升,则通过前几天的数据 预估后几天的走势。如果是陡坡趋势 则预估的趋势同理。待RD提供相关的API文档,数据表,测试方法,相关算法 模型(线性模型,prometheus、arima)等

算法模块参考文档

时间序列模型(ARIMA)

时间序列模型Prophet使用详细讲解

41. 容器资源 > 命名空间管理

[root@node1 ~]# kubectl get namespace -A|wc -l
16
[root@node1 ~]# kubectl get namespace -A
NAME                    STATUS   AGE
cert-manager            Active     24h
default                      Active     25h
ingress-nginx           Active     25h
isddc                        Active     23h
kube-node-lease      Active     25h
kube-public              Active     25h

40. 容器资源 > 配置 > 秘钥

[root@node1 ~]# kubectl get secret -A|wc -l
112
[root@node1 ~]# kubectl get secret -A
NAMESPACE             NAME                                             TYPE                                   DATA   AGE
cert-manager  cert-manager-cainjector-token-g58pq  kubernetes.io/service-account-token 3  24h
default             default-token-bpzl2                              kubernetes.io/service-account-token  3  25h
ingress-nginx   default-token-86dl2                             kubernetes.io/service-account-token  3  25h

查看秘钥详情  kubectl describe secret {{secretname}} -n {{secretnamespace}}

[root@node1 ~]# kubectl describe secret cert-manager-cainjector-token-xhq4d -n cert-manager

39. 容器资源 > 配置 > 配置项

[root@node1 ~]# kubectl get configmap -A
NAMESPACE              NAME                                DATA   AGE
default                blueprint-tpl-ftvpcy                           1      21h
default                input-tomcat1739-mowhcc              1      20h
ingress-nginx      ingress-nginx                                  0      25h
ingress-nginx      tcp-services                                    3      25h
ingress-nginx      udp-services                                   0      25h

38. 容器资源 > 服务和负载均衡 > 服务入口

[root@node1 ~]# kubectl get ingress -A|wc -l
7
[root@node1 ~]# kubectl get ingress -A
NAMESPACE    NAME                   HOSTS                ADDRESS        PORTS      AGE
isddc             isddc-grafana           grafana.xx.com      172.xx               80, 443     20h
kube-system fileserver-ingress      fileserver.xx.com    172.xx              80, 443    22h

37. 容器资源 > 服务和负载均衡 > 服务

[root@node1 ~]# kubectl get service -A|wc -l
78
[root@node1 ~]# kubectl get service -A
NAMESPACE     NAME       TYPE     CLUSTER-IP     EXTERNAL-IP   PORT(S)                     AGE
cert-manager  cert-manager  ClusterIP   10.xx                 <none>         9402/TCP

37. 容器资源 > 工作负载 > 容器组

[root@node1 ~]# kubectl get pod -A|wc -l
145
[root@node1 ~]# kubectl get pod -A
NAMESPACE     NAME                                                  READY      STATUS      RESTARTS   AGE
cert-manager   cert-manager-85c5f85645-z4684               1/1         Running                 0          22h
cert-manager   cert-manager-cainjector-7c4fdd9744-2ms8k  1/1     Running                 5          22h

36. 容器资源 > 工作负载 > 定时任务

[root@node1 ~]# kubectl get cronjob -A
No resources found.
 

35. 容器资源 > 工作负载 > 任务

[root@node1 ~]# kubectl get job -A|wc -l
9
[root@node1 ~]# kubectl get job -A
NAMESPACE   NAME                     COMPLETIONS   DURATION   AGE
isddc               isddc-alarms-init-job           1/1                      8s          19h
isddc               isddc-grafana-init-job          1/1                    108s        21h

  

34. 容器资源 > 工作负载 > 守护进程服务

[root@node1 ~]# kubectl get daemonset -A|wc -l
13
[root@node1 ~]# kubectl get daemonset -A
NAMESPACE       NAME                          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                  AGE      ingress-nginx   ingress-nginx-controller      1         1         1       1            1           node-role.kubernetes.io/node=ingress-nginx   22h
kube-system     calico-node                   3         3         3       3            3           <none>                                       22h
kube-system     kube-proxy                    7         7         3       7            3           beta.kubernetes.io/os=linux                  22h
kube-system     mkdir                         3         3         3       3            3           <none>                                       22h

查看服务进程daemonset某个服务的yaml文件

kubectl get daemonset {{daemonsetname}} -n {{namespace}} -o yaml

如[root@node3 ~]# kubectl get daemonset ingress-nginx-controller -n ingress-nginx -o yaml

编辑服务进程daemonset的yaml文件

kubectl edit daemonset {{daemonsetname}} -n {{namespace}} 

33. 容器资源 > 工作负载 > 有状态服务

[root@node1 ~]# kubectl get statefulset -A
NAMESPACE              NAME                               READY   AGE
kube-system      harbor-harbor-database               1/1          22h
kube-system      harbor-harbor-redis                      1/1          22h
logging               elasticsearch-logging                    3/3         22h
nats                    nats                                               3/3         22h
[root@node1 ~]# kubectl get statefulset -A|wc -l
5

[root@node1 ~]# kubectl get pod -A -o wide|grep logging-elasticsearch   查看容器组详细信息

 

32. 容器资源 > 工作负载 > 无状态服务

[root@node1 ~]# kubectl get deployment -A|wc -l
84
[root@node1 ~]# kubectl get deployment -A

NAMESPACE              NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
cert-manager           cert-manager                             1/1                   1                    1             22h
cert-manager           cert-manager-cainjector             1/1                   1                    1            22h
cert-manager           cert-manager-webhook              1/1                    1                   1            22h
default                      depoly1731                                1/1                    1                   1            18h

[root@node1 ~]# kubectl get deployment -A -o wide    -o wide 查看详细信息
NAMESPACE     NAME             READY     UP-TO-DATE      AVAILABLE      AGE  

命名空间              服务名称          状态                                      是否可用         运行时长

CONTAINERS           IMAGES       

容器                            镜像

SELECTOR

服务选择
cert-manager      cert-manager    1/1                   1                         1                45h

cert-manager     registry.xx.com/base/cert-manager-controller:v0.14.0                                            app.kubernetes.io/component=controller,app.kubernetes.io/instance=cert-manager,app.kubernetes.io/name=cert-manager

查看服务详情

kubectl describe 服务类型 name -n namespace命名空间

kubectl describe deployment sla-manager -n isddc

 31. 存储类storageclass

本地存储local-storage:

先创建pv再创建pvc(pvc用pv),创建完pvc,pv的name namespace会自动绑定pvc的信息

再去服务器创建pod 修改namespace为default 修改deployment的namespace

删除pvc的时候保证没有pod在使用 删pv保证没有pvc再用

删除storgeclass的时候保证没有pv再用

状态:avaliable release 绑定后才是bound

如何关联绑定pv pvc?在页面操作:

在存储卷声明pv编辑yaml文件:

"storageClassName": "local-storage",

"volumeMode": "Filesystem"

前新增/插入/添加 这么记录是为了以后搜索关键字方便。。。。

"volumeName": "pv的name",

完整pv配置文件yaml

{
  "kind": "PersistentVolume",
  "apiVersion": "v1",
  "metadata": {
    "name": "pv1015ls1838",
    "selfLink": "/api/v1/persistentvolumes/pv1015ls1838",
    "uid": "93e08254-94b1-44e6-9ce5-93119b657eda",
    "resourceVersion": "5989164",
    "creationTimestamp": "2021-10-15T10:38:30Z",
    "annotations": {
      "pv.kubernetes.io/bound-by-controller": "yes"
    },
    "finalizers": [
      "kubernetes.io/pv-protection"
    ]
  },
  "spec": {
    "capacity": {
      "storage": "10Gi"
    },
    "local": {
      "path": "/var/localpv/lili"
    },
    "accessModes": [
      "ReadWriteOnce"
    ],
    "claimRef": {
      "kind": "PersistentVolumeClaim",
      "namespace": "default",
      "name": "pvc1015ls1838",
      "uid": "8788d7ff-3e45-477d-8cae-65aef7547693",
      "apiVersion": "v1",
      "resourceVersion": "5989161"
    },
    "persistentVolumeReclaimPolicy": "Retain",
    "storageClassName": "local-storage",
    "volumeMode": "Filesystem",
    "nodeAffinity": {
      "required": {
        "nodeSelectorTerms": [
          {
            "matchExpressions": [
              {
                "key": "kubernetes.io/hostname",
                "operator": "In",
                "values": [
                  "node1"
                ]
              }
            ]
          }
        ]
      }
    }
  },
  "status": {
    "phase": "Bound"
  }
}

完整pvc配置文件yaml

{
  "kind": "PersistentVolumeClaim",
  "apiVersion": "v1",
  "metadata": {
    "name": "pvc1015ls1838",
    "namespace": "default",
    "selfLink": "/api/v1/namespaces/default/persistentvolumeclaims/pvc1015ls1838",
    "uid": "8788d7ff-3e45-477d-8cae-65aef7547693",
    "resourceVersion": "5989166",
    "creationTimestamp": "2021-10-15T10:38:54Z",
    "annotations": {
      "pv.kubernetes.io/bind-completed": "yes"
    },
    "finalizers": [
      "kubernetes.io/pvc-protection"
    ]
  },
  "spec": {
    "accessModes": [
      "ReadWriteOnce"
    ],
    "resources": {
      "requests": {
        "storage": "10Gi"
      }
    },
    "volumeName": "pv1015ls1838",
    "storageClassName": "local-storage",
    "volumeMode": "Filesystem"
  },
  "status": {
    "phase": "Bound",
    "accessModes": [
      "ReadWriteOnce"
    ],
    "capacity": {
      "storage": "10Gi"
    }
  }
}

目标是要建立一pod:

1 创建盘:kubectl create -f pvc-test1.yml

2 创建pod:  kubectl create -f deployment1.yaml

查看pvc :  kubectl get pvc -A |grep <pvc-log1>

查看pod : kubectl get pod -A|grep <ssh-storage-test1>

删除pvc的时候保证没有pod在使用 删pv保证没有pvc再用

删除storgeclass的时候保证没有pv再用

状态:avaliable release 绑定后才是bound

创建pvc填写的路径会在/var/localpv添加新的文件夹

登录A机器(144.62) 拷贝文件夹到测试服务器

scp -r /mnt/xx/sdk/daystar/storage/beijing/ root@10.xx/mnt/xx/sdk/daystar/storage

分布式存储:

只需要创建pvc 不需要创建pv

pvc不需要绑定 创建完成状态就是bound

创建StorageClass资源(yaml方式)
$ kubectl create -f storageclass_test.yaml

查看StorageClass资源
$ kubectl get storageclass -n ns1
我们也可以通过缩写进行查看kubectl get sc

查看某个StorageClass资源详情
$ kubectl describe sc sc_name
其中,sc_name为StorageClass资源的名称

删除StorageClass资源
$ kubectl delete sc sc_name
其中,sc_name为StorageClass资源的名称

列出/查看集群中的 storageclass

kubectl get storageclass -A

kubectl get storageclass -n ns1

或者  kubectl get storageclasses.storage.k8s.io

[root@node1 home]# kubectl get storageclass
NAME                            PROVISIONER                    AGE
managed-nfs-storage (default)   fuseim.pri/ifs                 3h25m
standard                        kubernetes.io/no-provisioner   3h13m

显示local 和 standard类型

kubectl get storageclass standard   查看standard类型

统计storageclass个数

kubectl get storageclass -A|wc -l

kubectl describe storageclass managed-nfs-storage 

查看storageclass详情 kubectl describe storageclass storageclass的name

查看默认存储类 输出yaml文件

kubectl get storageclass standard -o yaml

查看服务yaml配置文件 

kubectl get storageclass managed-nfs-storage -o yaml

pv和pvc的使用

       存储工程师把分布式存储系统上的总空间划分成一个一个小的存储块

       k8s管理员根据存储块创建与之一一对应的pv资源

       pv属于集群级别资源  不属于任何名称空间 定义的时候不能指定名称空间

       用户在创建pod的时候同时创建与pv一一对应的pvc资源

       创建Pod的时候,系统里并没有合适的PV跟它定义的PVC绑定 也就是说此时容器想要使用的Volume不存在。这时候Pod的启动就会报错

 创建小的存储块

 创建pv资源

 创建pod和pvc资源

 演示结果

30. 存储卷声明pvc

参考博客 k8s 搭建nginx实例(service、configmap和deployment组合)

创建与搭建好的44.62服务器一样的环境

mkdir -p /mnt/xx/sdk/daystar/storage

拷贝远程服务器文件到本机

[root@master1 ~]# scp -r root@xx.xx.144.62://mnt/xx/sdk/daystar/storage/* /mnt/xx/sdk/daystar/storage

启动盘需要依赖镜像

需要把image(镜像)提前加载到对应的node上 如果先创建的pvc和pod再加载镜像

cd /mnt/xx/sdk/daystar/storage

加载镜像

docker load -i centos_v3.tar.gz

目标是要建立一pod:

1 创建pvc盘:kubectl create -f pvc-test1.yml

2 创建pod:  kubectl create -f deployment1.yml

查看pvc :  kubectl get pvc -A |grep <pvc.yml的name>

查看pod : kubectl get pod -A|grep <deployment.yml的name>

查看pod详情, kubectl describe pod pod服务名称 -n pod的namespace命名空间

[root@node1 tmp]# kubectl describe pod ssh-storage-podxx -n kube-system

删除盘和pod

kubectl delete -f <pvc.yaml>

kubectl delete -f <deployment.yml>

创建的pvc.yml为

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-log1
  namespace: kube-system
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 20Gi
  storageClassName: managed-nfs-storage
  volumeMode: Filesystem
status:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 20Gi
  phase: Bound

创建的deployment.yml为

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ssh-storage-test1
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: ssh-storage-test1
  replicas: 1
  template:
    metadata:
      labels:
        name: ssh-storage-test1
    spec:
      nodeSelector:
        kubernetes.io/hostname: node5
      containers:
        - name: ssh-storage-test1
          image: centos:3
          imagePullPolicy: IfNotPresent
          securityContext:
            privileged: true
          resources:
            limits:
              memory: "1Gi"
              cpu: "0.1"
            requests:
              memory: "1Gi"
              cpu: "0.1"
          ports:
            - containerPort: 22
          volumeMounts:
            - mountPath: "/logs"
              name: pvc-log
      volumes:
        - name: pvc-log
          persistentVolumeClaim:
            claimName: pvc-log

---

apiVersion: v1
kind: Service
metadata:
  name: ssh-storage-test1
spec:
  selector:
    name: ssh-storage-test1
  ports:
    - port: 10000
      targetPort: 22

29. 查看存储卷声明pvc

统计pvc个数

kubectl get pvc -A | wc -l

[root@node1 ~]# kubectl get pvc -A -o wide
NAMESPACE    NAME                   STATUS    VOLUME           CAPACITY   ACCESSMODES   STORAGECLASS   AGE     VOLUMEMODE
isddc                 isddc-arangodb      Bound       isddc-arangodb  50Gi             RWO    

standard                  10d        Filesystem
isddc         isddc-influxdb                                      Bound     isddc-influxdb                             100Gi      RWO            standard              10d     Filesystem
isddc         isddc-kafka                                         Bound     isddc-kafka                                100Gi      RWO            standard              10d     Filesystem

查看某个存储类,grep 存储类名

[root@node1 ~]# kubectl get pvc -A -o wide|grep managed-nfs-storage

查看存储某个服务的yaml文件

kubectl get pvc {{pvcname}} -n {{namespace}} -o yaml

如 [root@node3 ~]# kubectl get pvc isddc-influxdb -n isddc -o yaml

编辑存储某个服务的yaml文件

kubectl edit pvc {{pvcname}} -n {{namespace}}

如[root@node3 ~]# kubectl get pvc isddc-influxdb -n isddc -o yaml

 容器资源 > 存储管理 > 存储卷pv

kubectl get pv -A -o wide

统计存储卷pv个数

kubectl get pv -A | wc -l

查看存储卷pv某个服务的yaml文件

kubectl get pv {{pvname}} -n {{namespace}} -o yaml

如[root@node3 ~]# kubectl get pv pvc-0f402491-84bc-4c8d-a585-3c1f72d0d005 -n isddc -o yaml

编辑存储卷pv某个服务的yaml文件

kubectl edit pv {{pvname}} -n {{namespace}} 

如[root@node3 ~]# kubectl edit pv pvc-0f402491-84bc-4c8d-a585-3c1f72d0d005 -n isddc

28. cat显示指定的行

【一】从第3000行开始,显示1000行。即显示3000~3999行

cat filename | tail -n +3000 | head -n 1000

【二】显示1000行到3000行

cat filename| head -n 3000 | tail -n +1000

*注意两种方法的顺序

分解:

    tail -n 1000:显示最后1000行

    tail -n +1000:从1000行开始显示,显示1000行以后的

    head -n 1000:显示前面1000行

【三】用sed命令

 sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行

[root@node1 ~]# kubectl get pod -A
NAMESPACE     NAME                                            READY   STATUS    RESTARTS    AGE
ceph-csi-plugin   hcp-ceph-csi-rbd-nodeplugin-9r9gd   3/3     Running           0               28d
ceph-csi-plugin   hcp-ceph-csi-rbd-nodeplugin-lf2l8      3/3     Running           0               28d

[root@node1 ~]# kubectl get pod -A|awk '{print $2"|||"$4","}' > k8spod.txt
[root@node1 ~]# cat k8spod.txt |wc -l
172
[root@node1 ~]# cat k8spod.txt|tail -n +150|head -n 50

27. k8s查看集群下的各节点

查看cluster下全部pod

kubectl get pod -A -o wide

展示字段:NAMESPACE NAME READY STATUS RESTARTS AGE IP

查看cluster下某个pod

[root@node1 ~]# kubectl get pod -A|grep hcp-ceph-csi-rbd-provisioner-xx-p8nl7

ceph-csi-plugin hcp-ceph-csi-rbd-provisioner-xx-p8nl7 6/6 Running 0 20d

登录到某个pod

kubectl exec isddc-api-xx-ptmkv -n isddc -it sh

查看pod的id,2个变量分别为kubectl get pod -A -o wide 的第一二列

kubectl get pods -n <namespace> <pod-name> -o jsonpath='{.metadata.uid}'

查看全部node

边缘端资源管理 > 主机资源 > 查看容器主机

kubectl get node -A -o wide

kubectl get node -A

查看某个node的id

kubectl get node node2 -o jsonpath='{.metadata.uid}'

kubectl get node <node-name> -o jsonpath='{.metadata.uid}'

查看ingress

kubectl get ingress -A

字段:NAMESPACE     NAME      HOSTS      ADDRESS        PORTS     AGE

[root@node1 ~]# kubectl get ingress -A -o wide|grep hydra-login-consent-node
kube-system   hydra-login-consent-node   login.xx.xx.cloud    10.121.xx.xx,10.121.xxx.xxx9   80, 443   21d

查看某个ingress的id

[root@node1 ~]# kubectl get ingress -n isddc isddc-grafana -o jsonpath='{.metadata.uid}'

kubectl get ingress -n <namespace> <ingress-name> -o jsonpath='{.metadata.uid}'

把每个service的name写到文件

kubectl get svc -A -o wide|awk '{print $2}'>service.txt

用shell处理文本在每行后面追加|||active

sed 's/$/|||active,/g' service.txt

查看service

[root@node1 ~]# kubectl get svc -A -o wide|grep appmanager
kube-system   appmanager   ClusterIP   10.xx.xx.xxx   <none>        80/TCP

查看某个service的id

 [root@node1 ~]# kubectl get svc -n kube-system appmanager -o jsonpath='{.metadata.uid}'

kubectl get svc -n <namespace> <svc-name> -o jsonpath='{.metadata.uid}'


 

26. 查看此集群下的所有域名

kubectl get ingress -A

25. 磁盘读写测试 disk read    disk write  磁盘利用率 服务器不支持rz sz

修改机器yum源为阿里的源

如果机器没有wget   先安装 yum install wget -y

1. 备份源文件

[root@node1 ~]# mv /etc/yum.repos.d/base.repo /etc/yum.repos.d/CentOS-Base.repo_bak

命名不同而已

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak

2. 获取源文件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3.重新设置缓存
yum clean all
清除缓存
yum makecache
重新生成缓存,加速访问和下载

比如安装rzsz 

[root@node1 yum.repos.d]#    yum install -y lrzsz

  

4. iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析

iostat属于sysstat软件包。可以直接安装

yum install sysstat -y

iostat -d /dev/sda -d:仅显示设备利用率;

iostat 2 每2秒读取一次数据

dd if=/dev/zero of=/disk/data.log bs=1KB count=3076

每次写入数据大小为1KB,写3076个

在/根目录下创建文件/disk/data.log

执行

顺序读 MBps

fio -runtime=3000 -filename=/disk/data.log -direct=1 -thread -rw=read -bs=4k -size=30G -iodepth=64 -ioengine=libaio -name=mytest>>/read.log

顺序写 MBps

fio -runtime=3000 -filename=/disk/data.log -direct=1 -thread -rw=write -bs=4k -size=30G -iodepth=64 -ioengine=libaio -name=mytest>>/write.log

随机写 IOps

fio -runtime=3000 -filename=/disk/data.log -direct=1 -thread -rw=randwrite -bs=4k -size=30G -iodepth=64 -ioengine=libaio -name=mytest>>/randwrite.log

随机读 IOps

fio -runtime=3000 -filename=

测试完毕把/disk/data.log删除

24. kubectl edit cm -n kube-system xxversion

编辑配置文件

23.  kubectl get configmap -n kube-system configmap

查看所有的configmap

# 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间

kubectl get pod kubectl get pod -n kube kubectl get pod -o wide

# 查看 RC 和 service 列表, -o wide 查看详细信息

kubectl get rc,svc kubectl get pod,svc -o wide kubectl get pod <pod-name> -o yaml

参考kubectl 常用命令总结 - klvchen - 博客园

22. kubectl get ingress -A

可以看到前端对应的URL

[root@node1 ~]# kubectl get ingress -A
NAMESPACE     NAME                       HOSTS                                                           ADDRESS                         PORTS     AGE
isddc         grafana-ingress                  xx.xx.cloud                                                      10.xx.xx.xx,10.xx.xx.xx       80, 443     20d
kube-system   fileserver-ingress         xx.xx.cloud                                                       10.xx.xx.xx,10.xx.xx.xx       80, 443    132d

21. Centos7 终端报Message from syslogd :kernel:unregister_netdevice

kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 3

https://www.jianshu.com/p/96d7e2cd9e99

好像是 kernel和k8s的bug  一直没有解决 

解决办法 

systemctl stop rsyslog
systemctl disable rsyslog

20. 修改机器yum源为阿里的源

1 备份源文件

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak

2 获取源文件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3 刷新cache

yum makecache

19. Linux有如下的关机和重启命令:shutdown, reboot, halt, poweroff,那么它们有什么区别呢?

shutdown - 建议使用的命令
shutdown是最常用也是最安全的关机和重启命令,它会在关机之前调用fsck检查磁盘,其中-h和-r是最常用的参数:

-h:停止系统服务并关机  
-r: 停止系统服务后重启  
下面看几个例子:

shutdown -h now  --立即关机  
shutdown -h 10:53  --到10:53关机,如果该时间小于当前时间,则到隔天  
shutdown -h +10  --10分钟后自动关机  
shutdown -r now  --立即重启  
shutdown -r +30 'The System Will Reboot in 30 Mins'   --30分钟后重启并并发送通知给其它在线用户
reboot 
reboot表示立即重启,效果等同于shutdown -r now

poweroff
poweroff表示立即关机,效果等同于shutdown -h now,在多用户模式下(Run Level 3)不建议使用
 

18. Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。

Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。

在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署。Systemd通常是所有其它守护进程的父进程,但并非总是如此。

列举已经启动的unit

systemctl list-units (或者直接 sudo systemctl)

command 主要有:

start:立刻启动后面接的 unit。

stop:立刻关闭后面接的 unit。

restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。

reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。

status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。

is-active:目前有没有正在运行中。

kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。

17. GB和GiB的区别

Gibibyte(giga binary byte的缩写)是信息或计算机硬盘存储的一个单位,简称GiB。由来“GiB”、“KiB”、“MiB”等是于1999年由国际电工协会(IEC)拟定了"KiB"、“MiB”、“GiB"的二进制单位,专用来标示“1024进位”的数据大小。具体的来说,1GiB=1024MiB,1MiB=1024KiB。他们与GB、MB、KB是不一样的,GB等则是1000进位的数据单位。

GB(gigabyte)是十进制的容量单位,1GB等于1,000,000,000 Bytes。而二进制的容量单位则是用GiB(Gibibyte)就是Giga Binary Byte,相等于1,073,741,824 Bytes。

所以一个160GB的硬盘其实只有149.0116119 GiB,厂商并没有欺骗顾客,更由于无法精确控制盘面的容量,大多数时候都会提供多余的空间以确保品质。


以下示范如何换算成GiB:

1GiB=(1024*1024*1024)B=1073741824B

1GB=(1000*1000*1000)B=1000000000B

1GiB/1GB=1073741824/1000000000=1.073741824

看到的磁盘为436468MB=426GB=426*1.074Gib=457GiB

例如:

8TiB=8192GiB=8192*1.073741824=8796.093022208GB

8796.093022208GB/1.073741824=8192GiB

16. 查看本机ip

ifconfig|grep inet

ip route

列出路由

linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务

15. 网卡利用率 (百分比)

强大的性能监测工具dstat

安装

yum install --downloadonly dstat   

yum install --downloadonly --downloaddir=./ dstat

在2台服务器直接发起网络请求

在发起 iperf3 -c 192.168.xx.xx -t 1800 的服务器查看网卡信息

[  5]  25.00-26.00  sec  75.5 MBytes   633 Mbits/sec    0    576 KBytes
 

被测项目设置的网卡为1000mbps = 125MBytes

拓展:

1GB=1073741824字节

1KB=1024字节

1M=1024KB

1G=1024MB 

数据的存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

B与iB

1KiB(Kibibyte)=1024byte

1KB(Kilobyte)=1000byte

1MiB(Mebibyte)=1048576byte

1MB(Megabyte)=1000000byte

首先是“Mbps”,其全称为Million bits per second,意为每秒传输百万位(比特)数量的数据,而这里的bit(比特,1比特等于1个位)是表示数字信号数据的最小单位

而Mb/s中的Mb与Mbps中的Mb意义相同,均表示百万位(比特)数据数量,所以Mbps=Mb/s

那么bit(比特)与Byte(字节)之间有什么关系吗?

1Byte(字节)=8bit(比特/位),在计算机中每8位为1字节,也就是1Byte=8bit,当在用Bytes/s和bits/s来表示网速时,于是就有1MB/s=8Mbps=8Mb/s

dstat命令查看recv为85-90

Transfer 为70-90,网卡利用率 (百分比)

已用 = 90/125*100=72 

剩余 =(125-90)/125*100=28

一直动态变化则正确

14. IO 带宽

13. 每秒 IO 吞吐量

12. systemctl list-units --type=service

列出所有service类型的unit
systemctl list-units --type=service --all

systemctl 列出所有的系统服务
systemctl list-units 列出所有启动unit
systemctl list-unit-files 列出所有启动文件
systemctl list-units –type=service –all 列出所有service类型的unit
systemctl list-units –type=service –all grep cpu 列出 cpu电源管理机制的服务
systemctl list-units –type=target –all 列出所有target

systemctl list-dependencies #查看当前运行级别target(mult-user)启动了哪些服务

11. 查看网卡硬件信息

lspci|grep Ethernet

10. kdump 捕获崩溃

Kdump详解 参考博客Kdump详解_Eloim_Ct的博客-CSDN博客

​ Kdump是在系统崩溃、死锁或死机时用来转储内存运行参数的一个工具和服务,是一种新的crash dump捕获机制,用来捕获kernel crash(内核崩溃)的时候产生的crash dump。kdump需要配置两个不同目的的kernel,其中一个我们在这里称作standard(标准的)(production)kernel;另一个称之为Crash(崩溃的)(capture)kernel。打个比方,如果系统一旦崩溃,那么正常的内核就没有办法工作了,在这个时候将由kdump产生一个用于(capture)捕获当前运行信息的内核,该内核会将此时的内存中的所有运行状态和数据信息收集到一个dump core文件中以便于Ret Hat工程师分析崩溃的原因,一旦内存信息收集完成,系统将会自动重启这和以前的diskdump、netdump同理,只不过kdump是RHEL6特有的

standard(production)kernel,指的是我正在使用的kernel,当standard kernel在使用时出现crash时,kdump会切换到crash kernel,简单来说,standard kernel会正运行时发生crash,而crash(capture)kernel会被用来捕获production kernel在crash时产生的crash dump

​ 捕获crash dump是在新的crash(capture)kernel的上下文中来捕获的,而不是在standard kernel上下文进行

​ 具体是当standard kernel方式crash的时候,kdump通过kexec自动启动进入到crash kernel当中。如果启动了kdump服务,standard kernel会预留一部分内存,这部分内存用来启动crash kernel。

​ kdump机制主要包括两个组件:kdump和kexec

​ 什么是kexec

​ kexec是一个快速启动kernel的机制,它运行在某一正在运行的kernel中,启动一个新的kernel(crash kernel),而且不用重新经过BIOS就可以完成启动。因为一般BIOS都会花费很长的时间,尤其是在大型并且同时连接许多外部设备的server上的环境下,BIOS会花费更多的时间

​ 查看Linux系统是否开启打开kdump:

[root@localhost ~]# ulimit -c        #如果输出为0,就是关闭,为unlimited则是打开,我的是关闭的
0
1
​ 临时打开/关闭kdump:

[root@localhost ~]# ulimit -c unlimited        #临时打开 比如之前测试推荐业务,后端是C++代码写的,尤其跑自动化/压测时会开启crash捕获,测试完在/tmp/dump查看是否有core
[root@localhost ~]# ulimit -c
unlimited        #验证为开启了
[root@localhost ~]# ulimit -c 0                #临时关闭
[root@localhost ~]# ulimit -c
0                    #验证为关闭了
 

9. 查看系统磁盘

linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息

df -h    查看磁盘使用情况   实际创建虚拟机时的虚拟空间是40G对应磁盘显示38G多

-h 方便阅读方式显示

fdisk -l |grep Disk 查看磁盘分区情况

lsblk  查看硬盘和分区分布

fdisk -l  查看硬盘和分区的详细信息

Disk /dev/vda: 42.9 GB, 429496772960 bytes, 83886000 sectors // 扇区个数

Units = sectors of 1 * 512 = 512 bytes // 柱面单元大小 (一个扇区作为一个柱面)

Sector size (logical/physical): 512 bytes / 512 bytes // 扇区大小

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x000b97c2

Device     Boot           Start             End          Blocks      Id         System

/dev/vda1 *                2048      2099199      1048576     83            Linux 

/dev/vda2            2099200    83886079     40893448    8e     Linux LVM

8. 创建虚拟机,使用vnc或者remote viewer连接虚拟机,安装系统如centos7 

mac无remote viewer 。需要下载vnc   

Windows下载地址  Remote Utilities Viewer v7.0.0中文破解版下载(附破解补丁) - 艾薇下载站  或者安装virt-viewer-x86-8.0.msi

把系统生成的vv文件(协议 虚拟机ip port passwd等信息)拖到rv软件然后安装虚拟机

按步骤安装 设置用户名 密码 重启虚拟机 登录虚拟机 修改虚拟网络 

修改虚拟网络

vi /etc/sysconfig/network-scripts/ifcfg-eth0

修改最后一行为yes

添加DNS=8.8.8.8

配置如下

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eno1
UUID=d1969ca3-fae4-477d-xx-xx
DEVICE=eno1
ONBOOT=yes
IPADDR=xx.xx.xx.xx
PREFIX=23
GATEWAY=xx.xx.xx.xx
DNS1=xx.xx.xx.xx

保存后记得重启网络 systemctl restart network

再查看ip a |grep inet

inet地址变了,分配了ip

inet为ipv4    inet6为ipv6

如果想在虚拟机(192.168开头)上传东西(虚拟机不支持scp  rz 等命令),比如测试CPU平均利用率的shell脚本,则需要给虚拟机绑定浮动ip(创建浮动ip地址,绑定虚拟机。解释:浮动ip地址相当于外网ip 10.121开头,可以从edge-node(172.16开头) scp到浮动ip的机器)

7. 内存利用率

计算方法

used+buff(cache)   /   total 

目前来看集群的内存利用率是在19~22% 

free -m|sed -n '2p'|awk '{printf("%.2f%%\n",($3+$6)/$2*100)}'
37.56%

2022年1月28测试

差值在于针对内存的buffer、cache的计算,当前监控系统的内存利用率的计算是将buffer和cache的值算在了可用内存范围,而测试所用脚本是将buffer和cache算了已用内存范围,实际上当一个程序需要申请较大的内存时,如果free的内存不够,内核会把部分cached的内存回收,回收的内存再分配给应用程序。所以对于linux系统,可用于分配的内存不只是free的内存,还包括cached和buffers的内存

内存利用率计算方法

- record: oi_node_memory_utilization

expr: 100 * (1 - ((node_memory_MemFree_bytes{host_uuid!=""} + node_memory_Cached_bytes{host_uuid!=""} + node_memory_Buffers_bytes{host_uuid!=""}) / node_memory_MemTotal_bytes{host_uuid!=""}))

内存利用率脚本

#!/bin/bash
while(true)

do

SYS_Rate=`free -m|sed -n '2p'|awk '{printf("%.2f%%\n",($4+$6)/$2*100)}'`
temp=`echo $SYS_Rate|awk -F "%" '{print $1}'`
final_result=`echo 100 - $temp|bc`
echo "The memory Rate : $final_result"

echo "------------------"

done

[root@edge-node2 ~]# free -lh
              total        used        free           shared      buff/cache    available
Mem:     755G      106G        561G        4.1G         87G             640G
Low:      755G      194G        561G
High:      0B          0B            0B
Swap:    4.0G       0B            4.0G

6.  CPU利用率

在Linux下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间,三者之和就是CPU的总时间,当没有用户进程、系统进程等需要执行的时候,CPU就执行系统缺省的空闲进程。从平常的思维方式理解的话,CPU的利用率就是非空闲进程占用时间的比例,即CPU执行非空闲进程的时间CPU总的执行时间

CPU的使用率是使用CPU的处理能力基准计算实时CPU占用率

CPU时间=user+system+nice+idle+iowait+irq+softirq

除idle外,cpu均被有效利用,取两个采样点,于是有:

cpuusage=[(user_2+sys_2+nice_2+iowait_2+irq_2+softirq_2)-(user_1+sys_1+nice_1+iowait_1+irq_1+softirq_2)]/(total_2-total_1)*100%

或者:

cpu usage=(idle2-idle1)/(total_2-total_1)*100%

%Cpu(s):  0.3 us,  0.2 sy,  0.0 ni, 98.0 id,  1.5 wa,  0.0 hi,  0.0 si,  0.0 st

第三行:cpu状态
6.7% us — 用户空间占用CPU的百分比
0.4% sy — 内核空间占用CPU的百分比
0.0% ni — 改变过优先级的进程占用CPU的百分比
92.9% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比

第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:

参数

解析(单位:jiffies)

user (2032004)

从系统启动开始累计到当前时刻,用户态的CPU时间,不包含 nice值为负进程。

nice (102648)

从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间

system (238344)

从系统启动开始累计到当前时刻,核心时间

idle (167130733)

从系统启动开始累计到当前时刻,除IO等待时间以外其它等待时间

iowait (758440)

从系统启动开始累计到当前时刻,IO等待时间

irq (15159)

从系统启动开始累计到当前时刻,硬中断时间

softirq (17878)

从系统启动开始累计到当前时刻,软中断时间

计算cpu利用率的shell脚本

[root@edge-node1 tmp]# cat /proc/stat  查看CPU
cpu  125094388 160 19646788 3863197092 1316929 22008021 20012906 0 105025966 0
cpu0 2300773 0 316963 59961223 28218 350919 322074 0 1989117 0
cpu1 1885273 2 1076616 59629637 19424 345949 333747 0 261688 0
cpu2 1777766 2 382328 60422289 24439 351985 339369 0 1086476 0
cpu3 1591870 11 367656 60620419 20955 352620 342047 0 1049030 0
cpu4 1573398 0 352758 60652301 21908 352368 340665 0 1072780 0

各个参数的具体解释:

第一排是cpu总计,下面是2个4核cpu的参数,故有8行数据。

user (494881706) 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒

nice (19) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)

system (67370877) 从系统启动开始累计到当前时刻,核心时间(单位:jiffies)

idle (876689477) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)

iowait (17202366) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,

irq (200116) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)

softirq (0) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

CPU利用率技术脚本:本脚本持续显示cpu的利用率

知道了/proc文件的内容之后就可以计算cpu的利用率了,具体方法是:先在t1时刻读取文件内容,获得此时cpu的运行情况,然后等待一段时间在t2时刻再次读取文件内容,获取cpu的运行情况,然后根据两个时刻的数据通过以下方式计算cpu的利用率:100 – (idle2 – idle1)*100/(total2 – total1)  其中total = user + system + nice + idle + iowait + irq + softirq

#!/bin/bash
while(true)
do

                                                                                                                                                                        #   $1       $2       $3           $4     $5         $6     $7                                                              
CPU_1=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')    #打印第一行cpu每列,user    nice   system4     idle  iowait      irq   softirq 
SYS_IDLE_1=$(echo $CPU_1 | awk '{print $4}')     #打印第4列idle,从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间
Total_1=$(echo $CPU_1 | awk '{printf "%.f",$1+$2+$3+$4+$5+$6+$7}')     #打印cpu全部列之和
sleep 2    #等待2秒
CPU_2=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')     #再次取最新的列
SYS_IDLE_2=$(echo $CPU_2 | awk '{print $4}')     #再次打印第4列idle,从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间
Total_2=$(echo $CPU_2 | awk '{printf "%.f",$1+$2+$3+$4+$5+$6+$7}')     #第二次打印cpu全部列之和
SYS_IDLE=`expr $SYS_IDLE_2 - $SYS_IDLE_1`    #expr命令是一个手工命令行计数器,用于求表达式变量的值,一般用于整数值,也可用于字符串 > expr length “this is a test”  为14(算上空格了)

Total=`expr $Total_2 - $Total_1`      #2次cpu总和的差值
TT=`expr $SYS_IDLE \* 100`          # (idle2 – idle1)*100   
SYS_USAGE=`expr $TT / $Total`   # (idle2 – idle1)*100/(total2 – total1)
SYS_Rate=`expr 100 - $SYS_USAGE`    #cpu利用率为100 – (idle2 – idle1)*100/(total2 – total1)  
echo "The CPU Rate : $SYS_Rate%"
echo "------------------"
done

2022年1月28测试

测试脚本与当前CPU利用率指标采集的计算方式不同,监控系统的CPU利用率的计算方式是将总的CPU减去idle的,从当前系统的运行数据与监控图进行对比来看,基本上是吻合的


无注释版:把以下脚本放到cpu.sh文件,在sh cpu.sh

#!/bin/bash

while(true)

do

CPU_1=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')    

SYS_IDLE_1=$(echo $CPU_1 | awk '{print $4}')     

Total_1=$(echo $CPU_1 | awk '{printf "%.f",$1+$2+$3+$4+$5+$6+$7}')    

CPU_2=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')   

SYS_IDLE_2=$(echo $CPU_2 | awk '{print $4}')     

Total_2=$(echo $CPU_2 | awk '{printf "%.f",$1+$2+$3+$4+$5+$6+$7}')

SYS_IDLE=`expr $SYS_IDLE_2 - $SYS_IDLE_1`

Total=`expr $Total_2 - $Total_1`     

TT=`expr $SYS_IDLE \* 100`           

SYS_USAGE=`expr $TT / $Total`   

SYS_Rate=`expr 100 - $SYS_USAGE`   

echo "The CPU Rate : $SYS_Rate%"

echo "------------------"

done

5. inux下dmidecode命令获取硬件信息

dmidecode在 Linux 系统下获取有关硬件方面的信息。dmidecode 遵循 SMBIOS/DMI 标准,以一种可读的方式dump出机器的DMI(Desktop Management Interface)信息, 其输出的信息包括 BIOS、系统、主板、处理器、内存、缓存等等, 既可以得到当前的配置,也可以得到系统支持的最大配置,比如说支持的最大内存数等。

aptitude install dmidecode # Debian/Ubuntu

yum install dmidecode # Fedora

pacman -S dmidecode # Arch Linux

emerge -av dmidecode # Gentoo

1、查看内存槽数、那个槽位插了内存,大小是多少

dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range

2、查看最大支持内存数

dmidecode|grep -P 'Maximum\s+Capacity'

3、查看槽位上内存的速率,没插就是unknown。

dmidecode|grep -A16 "Memory Device"|grep 'Speed'

dmidecode的输出格式一般如下:

Handle 0×0002

DMI type 2, 8 bytes

Base Board Information

Manufacturer:Intel

Product Name: C440GX+

Version: 727281-0001

Serial Number: INCY92700942

其中的前三行都称为记录头(recoce Header), 其中包括了:
1、recode id(handle): DMI表中的记录标识符,这是唯一的,比如上例中的Handle 0×0002。
2、dmi type id: 记录的类型,譬如说:BIOS,Memory,上例是type 2,即”Base Board Information”
3、recode size: DMI表中对应记录的大小,上例为8 bytes.(不包括文本信息,所有实际输出的内容比这个size要更大。)
记录头之后就是记录的值:
4、decoded values: 记录值可以是多行的,比如上例显示了主板的制造商(manufacturer)、model、version以及serial Number。
dmidecode的使用方法
1. 最简单的的显示全部dmi信息:dmidecode

这样将输出所有的dmi信息,你可能会被一大堆的信息吓坏,通常可以使用下面的方法。

2.更精简的信息显示: dmidecode -q

-q(–quite) 只显示必要的信息,这个很管用哦。
3.显示指定类型的信息:
通常我只想查看某类型,比如CPU,内存或者磁盘的信息而不是全部的。这可以使用-t(–type TYPE)来指定信息类型:

4. 服务器操作系统信息

hostnamectl 

[root@edge-xx ~]# hostnamectl
   Static hostname: edge-node2
   Pretty hostname: [edge-node2]
         Icon name: computer-server
           Chassis: server
        Machine ID: 499aa536dxxe5e
           Boot ID: fe03xxxxe1
  Operating System: MEC Node 4.2.0
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 4.19.104
      Architecture: x86-64

uname -a 

[root@edge-xx ~]# uname -a
Linux edge-xx 4.19.104 #1 SMP Mon Feb 24 19:19:24 CST 2020 x86_64 x86_64 x86_64 GNU/Linux

3. 查看服务器内存使用情况

free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等

  • -b  以Byte为单位显示内存使用情况。
  • -k  以KB为单位显示内存使用情况。
  • -m  以MB为单位显示内存使用情况。
  • -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值

B = bytes
K = kilos
M = megas
G = gigas
T = teras

物理内存

free 

free -lh  按照适合显示的单位去显示 最完美的命令

free    单位:kb

free -m  单位:M

free -g  单位:G

发现在创建虚拟机的时候 分配的内存是4048M 也就是3.953个G 但是实际free显示的total内存是3.7G

free命令显示的内容,第一行的数据是以系统视角看的,第二行的数据是以应用程序的视角看的。
第一行的used一项,其数据不单包含程序使用的内存,还包含buffers跟cached的内存,因此看上去可用的内存很少。
第二行的数据,分别是used-buffers-cached,跟free+buffers+cached,算了一下程序总的内存使用率是(total - free - buffers - cached) / total = 0.038 左右,因此top显示一列0.0也没什么问题。

2. 云计算测试项

hugepage是在linux2.6内核被引入的,主要提供4k的page和比较大的page的选择

cat /proc/meminfo   查看Hugepagesize大小  数量

[root@edge-node2 jumpserver]# cat /proc/meminfo |grep Hugepagesize
Hugepagesize:    1048576 kB

测试点(centos7)   

1 逻辑CPU内核:64

2 Huge Pages(size:amount):[HugePage:{sizeKB='1048576', amount='18'}]

3 设备透传:true

4 物理内存:755.64GB

5 Kdump状态:disabled

6 生产商:xx

产品系列:ThinkSystem

版本:07

产品名称:ThinkSystem SR650 -[7X06CTO1WW]-

UUID:66DEA72E-xx-11EA-xx-xx

序列号: J301N7C4

CPU类型:Intel Westmere Family

7 CPU型号:Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz

8 存储利用率:1.48%

测试命令行

1 less /proc/cpuinfo |grep 'processor'|wc -l       

2 less /proc/meminfo|grep Hugepagesize

3 less /proc/meminfo|grep HugePages_Free

4 free -lh

5 [root@edge-node2 ~]# ulimit -c   #如果输出为0,就是关闭,为unlimited则是打开,我的是关闭的
0
[root@edge-node2 ~]# ulimit -c unlimited      #临时打开
[root@edge-node2 ~]# ulimit -c
unlimited
[root@edge-node2 ~]# ulimit -c 0     #临时关闭
[root@edge-node2 ~]# ulimit -c
0

6  dmidecode |grep -A16 "System Information$"       查看服务器硬件信息、主板信息

dmidecode -s system-uuid    查看服务器uuid

dmidecode -s system-uuid |tr 'a-z' 'A-Z'    小写转换为大写 

7 查看CPU型号

cat /proc/cpuinfo | grep "model name" | cut -d ':' -f 2 |sort -u

8 ceph df     查看集群容量状态

在Linux中,内存都是以页的形式划分的,默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸

vim /etc/security/limits.conf

1. 物理内存 逻辑内存

服务器 8C16G为8核16G

查看CPU核数 more /proc/cpuinfo |grep "physical id"|grep "0"|wc -l 

或者查看核数 more /proc/stat   第一排是cpu总计,下面是2个32核cpu的参数,故有64行数据

查看内存 free -g 

参考博客linux查询服务器cpu核数_linux 下查看机器是cpu是几核的_weixin_39628256的博客-CSDN博客

# cat /proc/cpuinfo   查看物理cpu

有多少physical id 就有多少个cpu,我们的服务器是8个

有多少个core id就有多少核 --8个物理内核

总核数(指的是总的CPU物理内核数) = 物理CPU个数 X 每个物理CPU的核数  = 4 * 16 = 64
总逻辑CPU数(processor) = 物理CPU个数(physical) X 每个物理CPU的核数(cpu cores的值) X 超线程数( 2-如果支持并开启ht)

= 4 *16 * 2=132

=cat /proc/cpuinfo |grep "processor"|wc -l

= cat /proc/cpuinfo |grep "physical id"|uniq|wc -l * cat /proc/cpuinfo | grep "cores" | uniq * 2

是否开启intel的超线程技术(HT)
        如果有两个逻辑CPU具有相同的"core id",那么超线程是打开的。可以根据以下原则,来判断是否支持HT技术
        如果"siblings"和"cpu cores"一致,则说明不支持超线程,或者超线程未打开
        如果"siblings"是"cpu cores"的两倍,则说明支持超线程,并且超线程已打开

cat /proc/cpuinfo |grep "sibling"|uniq  

执行结果:siblings : 32

cat /proc/cpuinfo | grep "cpu cores"|uniq  

执行结果:cpu cores : 16



cat /proc/cpuinfo |grep "physical id"|grep "0"|wc -l   查看物理CPU个数
32


cat /proc/cpuinfo| grep "cpu cores"| uniq   查看每个物理CPU中core的个数(即核数)

cpu cores    : 16


grep "physical id" /proc/cpuinfo|sort -u|wc -l   
2


cat /proc/cpuinfo| grep "processor"| wc -l    查看逻辑CPU个数 逻辑CPU内核
64


cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c    查看CPU型号
64  Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz

cat /proc/cpuinfo| grep "cpu cores"| uniq   查看每个物理CPU中core的个数(即核数)  

cpu cores : 16

cat /proc/cpuinfo |grep MHz|uniq   查看CPU的主频

cpu MHz        : 999.995
cpu MHz        : 2276.509
cpu MHz        : 1000.007
cpu MHz        : 1000.004

查看Linux上存在的处理器数量的最简单和最短的方法,因为它是coreutils 的一部分而被广泛扩展

lscpu | grep 'CPU(s)'

查看cpu参数的命令

lscpu

[root@edge-node1 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                64   逻辑CPU个数
On-line CPU(s) list:   0-63
Thread(s) per core:    2  每核超线程数
Core(s) per socket:    16  每核CPU数
Socket(s):             2 物理CPU个数

NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 85
Model name:            Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
Stepping:              7
CPU MHz:               1000.003
BogoMIPS:              4600.00
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              1024K
L3 cache:              22528K
NUMA node0 CPU(s):     0-15,32-47
NUMA node1 CPU(s):     16-31,48-63
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi

待续。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux常用命令-云计算篇-100%亲测超详细讲解 的相关文章

  • Linux常用命令-压缩解压命令

    一 gz gzip 文件 压缩文件 只能压缩文件 gunzip 压缩文件 解压文件 二 tar 打包目录 tar gz tar命令压缩语法 tar 选项 zcf 压缩后文件名 目录 c 打包 v 显示详细信息 f 指定文件名 z 打包同时压
  • 企业网站建设方案书

    一 网站建设目标 1 1背景分析 现在网络的发展已呈现商业化 全民化 全球化的趋势 目前 几乎世界上所有的公司都在利用网络传递商业信息 进行商业活动 从宣传企业 发布广告 招聘雇员 传递商业文件乃至拓展市场 网上销售等 无所不能 如今网络已
  • 云计算——ACA学习 云计算核心技术

    作者简介 一名云计算网络运维人员 每天分享网络与运维的技术与干货 座右铭 低头赶路 敬事如仪 个人主页 网络豆的主页 写在前面 本系列将会持续更新云计算阿里云ACA的学习 了解云计算及网络安全相关从业的基础知识 以及阿里云产品的使用部署 提
  • 13 openEuler用户组管理

    文章目录 13 1 创建用户组 13 1 1 groupadd命令 13 1 2 用户组信息文件 13 1 3 创建用户组实例 13 2 修改用户组 13 2 1 修改GID 13 2 2 修改用户组名 13 3 删除用户组 13 4 将用
  • AWS SAA C003 S3 Type

    A solutions architect is using Amazon S3 to design the storage architecture of a new digital media application The media
  • 分布式系统的特征

    分布式系统概念与设计 读书笔记 第一章 第一章 分布式系统的特征 1 0 简介 分布式系统是其组件分布在联网的计算机上 组件之间通过传递消息进行通信和动作协调的系统 该定义引出了分布式系统的下列重要特征 组建的并发性 缺乏全局时钟 组件故障
  • 【云知识】云计算平台都有那些,涨涨云概念

    2023年 第36周 给自己一个目标 然后坚持总会有收货 不信你试试 云计算平台是指为企业和个人提供云计算服务的基础架构和环境 它提供了一系列的硬件 软件和网络设施 用于支持应用程序的部署 管理和运行 以及数据的存储 处理和传输 目录 一
  • Serverless 的前世今生

    作者 阿里云用户组 从云计算到 Serverless 架构 大家好 我是阿里云 Serverless 产品经理刘宇 很高兴可以和大家一起探索 Serverless 架构的前世今生 从云计算到云原生再到 Serverless 架构 技术飞速发
  • HCIE云计算之FusionCloud 6.3部署架构

    HCIE云计算之FusionCloud 6 3部署架构 一 不同的type类型场景需求 二 Region Type 1部署方案 1 Region Type 1简介 2 Region Type 1部署私有云介绍 3 Region Type 1
  • 腾讯云CVM云服务器实例族是什么?区别选择攻略

    腾讯云服务器CVM有多种实例族 如标准型S6 标准型S5 SA3实例 高IO型 内存 计算型及GPU型实例等 如何选择云服务器CVM实例规格呢 腾讯云服务器网建议根据实际使用场景选择云服务器CVM规格 例如Web网站应用可以选择标准型S5或
  • Linux命令_sort & 排序、去重

    目录 1 语法 1 1 常用参数 2 常见用法 2 1 按数值排序 2 2 按文件大小排序 2 3 指定某一列排序 2 4 去重后排序 2 5 生成随机数 2 6 同时查看多个文件 2 7 排序后的值写入文件 可直接修改文件 1 语法 so
  • hive的3种数据存储格式

    hive有textFile SequenceFile RCFile三种文件格式 其中textfile为默认格式 建表时不指定默认为这个格式 导入数据时会直接把数据文件拷贝到hdfs上不进行处理 SequenceFile RCFile格式的表
  • 华为云,站在数字化背后

    一场新的中国数字化战斗 正在被缓缓拉开帷幕 作者 裴一多 出品 产业家 如果说最近的讨论热点是什么 那无疑是互联网云 在数字化进入纵深的当下 一种市面上的观点是互联网的云业务由于盈利等问题 正在成为 被抛弃 的一方 互联网公司开始重新回归T
  • 从阿里云OSS获取文件,下载打包

    从OSS服务上批量获取文件下载 并打包zip Slf4j Component RefreshScope public class OssBootUtil 初始化 oss 客户端 return private static OSSClient
  • 腾讯云购买服务器多大合适?

    对于个人日常建站来说 购买多大的服务器合适需要根据实际需求进行考虑 一般个人用户的话2GB或者是4GB内存接基本够用了 原文地址 腾讯云购买服务器多大合适 轻量云Cloud 首先 需要考虑的是网站的访问量 如果只是一个简单的个人网站 每天只
  • 国外免费VPS真的零成本云计算体验?

    在当今数字化时代 云计算已经成为企业和个人的热门选择之一 云计算提供了便捷 灵活和经济高效的计算资源 可以帮助人们处理数据 托管网站 运行应用程序等等 然而 对于一些初学者来说 使用云计算可能会变得有些昂贵 但是 有一种方式可以让您尝试云计
  • 阿里云一二级域名配置

    一级域名配置 二级域名配置
  • CloudPulse:一款针对AWS云环境的SSL证书搜索与分析引擎

    关于CloudPulse CloudPulse是一款针对AWS云环境的SSL证书搜索与分析引擎 广大研究人员可以使用该工具简化并增强针对SSL证书数据的检索和分析过程 在网络侦查阶段 我们往往需要收集与目标相关的信息 并为目标创建一个专用文
  • 天翼运行高校云盘在线扩容

    天翼云文档地址 https www ctyun cn document 10027696 10169558 1 输入 growpart命令 检查此云主机是否已安装growpart扩容工具 若出现图中回显信息 则说明已经安装 无需手动安装 注
  • 阿里云服务器地域怎么选择?哪个地域好?

    阿里云服务器地域和可用区怎么选择 地域是指云服务器所在物理数据中心的位置 地域选择就近选择 访客距离地域所在城市越近网络延迟越低 速度就越快 可用区是指同一个地域下 网络和电力相互独立的区域 可用区之间可以做到故障隔离 将应用部署到不同可用

随机推荐

  • maven的package与install命令区别

    之前一直不明白package与 install的区别 今天测试了下 如果b项目依赖a项目 而a打了包 package jar仅仅时打到了a项目的target下 这时编译b项目 还是会报错 找不到所依赖的a项目 说明b项目在本地仓库是没有找到
  • HMM-维特比算法

    HMM 维特比算法 viterbi HMM回顾 隐马科夫链解法 维特比算法 Viterbi HMM回顾 最终的公式可以解释主要分为两个部分 P xi yi 发射概率 字面意思是从一个词性中发射 生成出某一个单词的概率 P yi yi 1 转
  • Vuforia手把手图文步骤

    1 创建工程 2 设置Android环境 3 勾上Vuforia选项 4 粘贴密匙 Vuforia官网不知道为啥有时进不去 过一天能进 再过一天又不能进
  • android webkit 内核

    关于android内核的一些基础知识 更详细请见附件 一 WebKit简介 WebKit是一个开源的浏览器网页排版引擎 包含WebCore排版引擎和JSCore引擎 WebCore和JSCore引擎来自于KDE项目的KHTML和KJS开源项
  • GitHub:新浪微博爬虫,用Python采集新浪微博数据

    hello 小伙伴们 大家好 今天给大家分享的开源项目是 weiboSpider 看名字也可以猜到这个项目是做什么的了 没错 这个开源项目就是采集新浪微博一个或多个用户 如 胡歌 迪丽热巴 郭碧婷 数据 并将结果信息写入文件或数据库 写入信
  • 华为OD机试 - 字符串分割(二)(Java)

    题目描述 给定一个非空字符串S 其被N个 分隔成N 1的子串 给定正整数K 要求除第一个子串外 其余的子串每K个字符组成新的子串 并用 分隔 对于新组成的每一个子串 如果它含有的小写字母比大写字母多 则将这个子串的所有大写字母转换为小写字母
  • C语言初学者可完成的简易的学生成绩管理系统

    该学生成绩管理系统为我大一的一次课设 只是用结构体和链表实现了 增删查改 功能 后续修改时我又加入了按学生总分进行链表排序和保存简单的txt文件 首先介绍我建立的结构体 它可以储存学号 学生姓名 各科成绩和总成绩 并定义了 新类型stu t
  • 【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文献 1 概述 文献来源 本文研究了变分贝叶斯方法在线性
  • 隐马尔科夫模型(HMM)

    目录 1 隐马尔科夫模型求解步骤 其它大部分模型也均遵循如下路径 2 HMM定义 2 1 HMM的两个基本性质 2 2 HMM的确定 3 HMM的三个基本问题 3 1 概率计算问题 3 1 1直接计算 暴力算法 3 1 2前向算法和后向算法
  • 数据库理论知识总结

    数据库知识总结 一 数据库理论知识 1 1概述 1 4个基本概念 数据 描述事物的符号记录 数据库 永久存储 有组织 可共享 数据库系统 由DB DBMS DBA 应用程序组成的存储 管理 处理和维护数据的系统 数据库管理系统 用户与操作系
  • 正则过滤去除 JSON 中的 Base64 字段

    背景 业务通过Base64字串传输图片 这对日志记录的影响很大 暂不说浪费大量空间 自己看日志的时候也很折磨 问题是携带Base64字串的JSON里面还有业务数据 不能一刀切直接不记录 正则 正经的正则为 说明 以引号开始 只包含字母数字或
  • 双栈排序(Java)

    题目描述 请编写一个程序 按升序对栈进行排序 即最大元素位于栈顶 要求最多只能使用一个额外的栈存放临时数据 但不得将元素复制到别的数据结构中 给定一个int numbers C 中为vector
  • 18.class_create(),device_create详细说明

    class create device create自动创建设备文件结点
  • 异步promise返回内容为undefined解决方案

    采用此种方法 前台调用函数同步获取的异步内容为undefined import getData from http export function getHomePagePart1 city const res getData api ho
  • String为什么推荐使用直接赋值的方式?

    主要原因是直接赋值 他会把值放在同一个地方 即同一块堆内存 大大节省了堆内存
  • 处理串口接收不定长数据的另一种解决方法

    开发平台 Keil 5 库函数版本 V3 5 芯片 STM32F103CBT6 之前我在我的另一篇博客中介绍过使用串口空闲中断 DMA的方式来处理不定长数据 没有看过的同学可以点击这里查看 今天要介绍另一种接收不定长数据的方法 使用的是接收
  • 计网_对广播风暴的抑制【2010考研题】

    下列网络设备中 能够抑制广播风暴的是 中继器 集线器 网桥 路由器 A 仅 和 B 仅 C 仅 和 D 仅 答案 D 解析 考查网络设备与网络风暴 广播域是指网段上所有设备的集合 这些设备收听送往那个网段的所有广播 冲突域是指在同一个冲突域
  • Chromebook开发者模式Linux,Chromebook 的开发者模式和开发者版本有什么区别?

    如果你刚开始使用 Chromebook 会发现有开发者模式和 Chrome OS 的开发者版本两个不同的说法 你一定会好奇它们是不是一个意思 实际上 并不是 什么是开发者模式 Developer Mode 开发者模式从根本上削弱了 Chro
  • 机器学习——K近邻算法

    1 K近邻算法介绍 kNN k nearest neighbor KNN 是一个基本的分类和回归算法 在1968年有Cover和Hart提出 k近邻算法的三个基本要素 模型三要素 k值的选择 距离度量 如 欧式距离 分类决策规则 如 多数表
  • Linux常用命令-云计算篇-100%亲测超详细讲解

    推荐不错的学习地址 https jingyan baidu com article f96699bb168d75894f3c1b5d html 推荐参考资料 但他写的不太对 利用shell脚本监控linux中CPU 内存和磁盘利用率 k8s