Linux性能监控

news2024/9/21 4:22:32

在这里插入图片描述

一、htop

安装:yum install htop -y
top是linux下常用的监控程序,htop相当于其加强版,颜色显示不同参数,且支持鼠标操作,相对于top简单和人性化!

在这里插入图片描述

在这里插入图片描述

第一行与第二行,显示CPU当前的运行负载,我这里是双CPU就显示两行!
第三行,显示内存的使用情况!
第四行,显示交换分区使用情况!

在这里插入图片描述

第一行,显示了当前的进程总数,其中有一个进程在运行!
第二行,显示了当前的负载情况,分别代表了,1分钟,5分钟,15分钟负载!

在这里插入图片描述

PID:进程标志号,是非零正整数
USER:进程所有者的用户名
PRI:进程的优先级别
NI:进程的优先级别数值
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程使用的共享内存值
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间
COMMAND:进程启动的启动命令名称

Linux系统的负荷“load averages”的含义

load average 三个参数的含义在w的手册里面找到,分别是1分钟、5分钟、15分钟内的平均负载。
如果使用的是 n 核CPU,那么为 n.00 时,说明负载满了,高于这个值就应该警惕。
不过对于服务器来说,最好留下一定余地,当参数高于n.00 - 0.3或n.00 - 0.5时,就应该警惕,赶快查看问题

二、dstat

安装:yum install dstat -y
dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。
dstat可以让你实时地看到所有系统资源,例如,你能够通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘的吞吐率(在相同的时间间隔内)。
dstat将以列表的形式为你提供选项信息并清晰地告诉你是在何种幅度和单位显示输出。这样更好地避免了信息混乱和误报。更重要的是,它可以让你更容易编写插件来收集你想要的数据信息,以从未有过的方式进行扩展。

在这里插入图片描述

1、 --total-cpu-usage---- CPU使用率
usr:用户空间的程序所占百分比;
sys:系统空间程序所占百分比;
idel:空闲百分比;
wai:等待磁盘I/O所消耗的百分比;
hiq:硬中断次数;
siq:软中断次数;
2、-dsk/total-磁盘统计
read:读总数
writ:写总数
3、-net/total- 网络统计
recv:网络收包总数
send:网络发包总数
4、---paging-- 内存分页统计
in: pagein(换入)
out:page out(换出)
注:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,通常情况下当系统已经开始用交换空间的时候,就说明你的内存已经不够用了,或者说内存非常分散,理想情况下page in(换入)和page out(换出)的值是0 0。
5、--system--系统信息
int:中断次数
csw:上下文切换
注:中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。 
默认情况下,dstat 会每隔一秒刷新一次数据,一直刷新并一直输出,按 Ctrl+C 退出 "dstat";
  • 常见的参数
-l :显示负载统计量
-m :显示内存使用率(包括used,buffer,cache,free值)
-r :显示I/O统计
-s :显示交换分区使用情况
-t :将当前时间显示在第一行
–fs :显示文件系统统计数据(包括文件总数量和inodes值)
–nocolor :不显示颜色(有时候有用)
–socket :显示网络统计数据
–tcp :显示常用的TCP统计
–udp :显示监听的UDP接口及其当前用量的一些动态数据
# dstat输出默认监控、报表输出的时间间隔为3秒钟,并且报表中输出10个结果
dstat 3 10

# 查看全部内存都有谁在占用:
dstat -g -l -m -s --top-mem

# 显示一些关于CPU资源损耗的数据:
dstat -c -y -l --proc-count --top-cpu

三、glances

安装:yum install epel-release -y
yum install glances -y
Glances 命令会分栏显示一些很有用的实时动态数据, 其目标就是利用最小的空间显示尽可能多的有用信息。Glances 监控了 PerCPU,负载,内存,数据交换,网络,磁盘I/O,加载数据和进程。

glances 可以为 Unix 和 Linux 性能专家提供监视和分析性能数据的功能,其中包括:
CPU 使用率
内存使用情况
内核统计信息和运行队列信息
磁盘 I/O 速度、传输和读/写比率
文件系统中的可用空间
磁盘适配器
网络 I/O 速度、传输和读/写比率
页面空间和页面速度
消耗资源最多的进程
计算机信息和系统资源

执行命令
在这里插入图片描述

通常包括如下字段:
VIRT: 虚拟内存大小 
RES: 进程占用的物理内存值 
%CPU:该进程占用的 CPU 使用率 
%MEM:该进程占用的物理内存和总内存的百分比 
PID: 进程 ID 号 
USER: 进程所有者的用户名 
TIME+: 该进程启动后占用的总的 CPU 时间 
IO_R 和 IO_W: 进程的读写 I/O 速率 
NAME: 进程名称 
NI: 进程优先级 S: 进程状态,其中 S 表示休眠,R 表示正在运行,Z 表示僵死状态。

四、netstat

Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

在这里插入图片描述

netstat的输出结果可以分为两个部分:
1、Active Internet connections 有源TCP连接,其中"Recv-Q"和"Send-Q"指接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
2、Active UNIX domain sockets 有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

列名解释:
Proto:显示连接使用的协议。
RefCnt:表示连接到本套接口上的进程号。
Types:显示套接口的类型。
State:显示套接口当前的状态。
Path:表示连接到套接口的其它进程使用的路径名。
netstat常见参数
-a (all) 显示所有选项,默认不显示LISTEN相关。
-t (tcp) 仅显示tcp相关选项。
-u (udp) 仅显示udp相关选项。
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态。

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

LISTEN和LISTENING的状态只有用-a或者-l才能看到。

五、lsof

安装:yum install lsof -y

在这里插入图片描述

COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

查看某个进程打开了哪些文件,加载库,依赖关系

[root@xiaowei ~]# lsof -p 22
COMMAND PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
md       22 root  cwd       DIR  253,0     4096   64 /
md       22 root  rtd       DIR  253,0     4096   64 /
md       22 root  txt   unknown                      /proc/22/exe

查看哪个文件被哪个进程打开

[root@xiaowei ~]# lsof /root
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash    1460 root  cwd    DIR  253,0     4096 33574977 /root
lsof    1815 root  cwd    DIR  253,0     4096 33574977 /root
lsof    1816 root  cwd    DIR  253,0     4096 33574977 /root

查看某个端口被哪个进程占用了

在这里插入图片描述

六、nc

安装:yum install nc -y

nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具

扫描嗅探其他的机器开放了哪个端口

(1)实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
(2)端口的扫描,nc可以作为client发起TCP或UDP连接
(3)机器之间传输文件
(4)机器之间网络测速   
 -z      Only scan for listening daemons, without sending any data to them. 
[-w timeout]


[root@slave-mysql ~]# nc -z 192.168.0.1 80
Connection to 192.168.0.1 80 port [tcp/http] succeeded!
[root@slave-mysql ~]# echo $?
0
[root@slave-mysql ~]# nc -z 192.168.0.1 8080
^C
[root@slave-mysql ~]# man nc
[root@slave-mysql ~]# nc -w 1 -z 192.168.0.1 8080
[root@slave-mysql ~]# echo $?
1
[root@slave-mysql ~]# 

七、nmap

安装:yum install nmap -y

探测一个机器或者整个局域网里机器开放了哪些端口

扫描局域网中IP地址为192.168.1.105的主机。执行命令如下所示:

root@localhost:~# nmap 192.168.1.105
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-05 18:44 CST
Nmap scan report for localhost (192.168.1.105)
Host is up (0.00010s latency).
Not shown: 995 closed ports
PORT   STATE SERVICE
21/tcp      open  ftp
22/tcp      open  ssh
23/tcp      open  telnet
111/tcp    open  rpcbind
445/tcp    open  microsoft-ds
MAC Address: 00:0C:29:31:02:17 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.87 seconds


从输出信息中,可以看到目标主机192.168.1.105上开启的端口有21、22、23、111、445,及这些端口所对应的服务。而且,还可以看到该目标主机的MAC地址为00:0C:29:31:02:17。从最后一行信息,可以看出目标主机是活动的(up),并且扫描该目标主机共用了0.87秒。

八、iftop

安装:yum install -y epel-release && yum install -y iftop

iftop命令用于查看网络上的流量情况,包括实时速率、总流量、平均流量等,是一款实时流量监控工具。在调试网络通信的程序中可能会用得上

直接运行iftop即可启动流量监控。如下图所示:

在这里插入图片描述

其中:

第一行,是带宽,下面带有标尺,用来标示每个连接上的实时流量占用的带宽
中间部分,是所有的连接,默认显示的是主机名,可以通过参数显示ip,箭头表示数据方向
中间右侧三列,分别是该连接2s、10s、40s的平均流量
底部三行,分别表示发送、接收、汇总的流量
底部三行第2列,为iftop启动到现在的流量汇总
底部三行第3列,为峰值速率
第4列,为平均值
注意,流量单位为bit,非Byte
可以看到,通过iftop可以很容易看到各个连接的流量使用情况。
在启动iftop时,可以指定监控的网卡,默认为第一块网卡:
iftop -i eth1

其他常用命令:
iftop -n # 直接显示IP, 不进行DNS反解析
iftop -N # 直接显示连接埠编号, 不显示服务名称
iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0 # 显示某个网段进出包流量
一般情况下,使用 iftop -nN启动即可。

九、nethogs

编译安装nethogs依赖包,centos默认rpm仓没有nethogs的包,所以需要我们手动编译。nethogs编译依赖2个库,在编译前需要安装下

yum install libpcap  libpcap-devel -y

直接运行nethogs:
在这里插入图片描述

实例1:设置5秒钟刷新一次,通过-d来指定刷新频率
# nethogs -d 5

实例2:监视eth0网络带宽
# nethogs eth0

实例3:同时监视eth0和eth1接口
# nethogs eth0 eth1

十、sar

sar 命令很强大,是分析系统性能的重要工具之一,通过该命令可以全面地获取系统的 CPU、运行队列、磁盘读写(I/O)、分区(交换区)、内存、CPU 中断和网络等性能数据。

sar命令的基本格式如下:

[root@localhost ~]# sar [options] [-o filename] interval [count]

此命令格式中,各个参数的含义如下:

  • -o filename:其中,filename 为文件名,此选项表示将命令结果以二进制格式存放在文件中;
  • interval:表示采样间隔时间,该参数必须手动设置;
  • count:表示采样次数,是可选参数,其默认值为 1;
  • options:为命令行选项
sar命令选项功能
-A显示系统所有资源设备(CPU、内存、磁盘)的运行状况。
-u显示系统所有 CPU 在采样时间内的负载状态。
-d显示系统所有硬盘设备在采样时间内的使用状态。
# 如果想要查看系统 CPU 的整理负载状况,每 3 秒统计一次,统计 5 次,可以执行如下命令:
[root@aliyun ~]# sar -u 3 5
Linux 3.10.0-1160.83.1.el7.x86_64 (aliyun) 	05/08/2023 	_x86_64_	(2 CPU)

10:51:09 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:51:12 AM     all      0.34      0.00      0.17      0.00      0.00     99.49
10:51:15 AM     all      0.67      0.00      0.34      0.00      0.00     98.99
10:51:18 AM     all      0.50      0.00      0.33      0.00      0.00     99.16
10:51:21 AM     all      0.51      0.00      0.34      0.00      0.00     99.16
10:51:24 AM     all      0.51      0.00      0.17      0.00      0.00     99.33
Average:        all      0.51      0.00      0.27      0.00      0.00     99.23
[root@aliyun ~]# 

此输出结果中,各个列表项的含义分别如下:

  • %user:用于表示用户模式下消耗的 CPU 时间的比例;
  • %nice:通过 nice 改变了进程调度优先级的进程,在用户模式下消耗的 CPU 时间的比例;
  • %system:系统模式下消耗的 CPU 时间的比例;
  • %iowait:CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例;
  • %steal:利用 Xen 等操作系统虚拟化技术,等待其它虚拟 CPU 计算占用的时间比例;
  • %idle:CPU 空闲时间比例。
# 如果想要查看系统磁盘的读写性能,每 3 秒统计一次,统计 5 次,可以执行如下命令:
[root@aliyun ~]# sar -d 3 5
Linux 3.10.0-1160.83.1.el7.x86_64 (aliyun) 	05/08/2023 	_x86_64_	(2 CPU)

10:53:34 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:53:37 AM  dev253-0      0.67      0.00      8.00     12.00      0.00      0.00      0.50      0.03

10:53:37 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:53:40 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

10:53:40 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:53:43 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

10:53:43 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:53:46 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

10:53:46 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:53:49 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:     dev253-0      0.13      0.00      1.60     12.00      0.00      0.00      0.50      0.01
[root@aliyun ~]# 

此输出结果中,各个列表头的含义如下:

  • tps:每秒从物理磁盘 I/O 的次数。注意,多个逻辑请求会被合并为一个 I/O 磁盘请求,一次传输的大小是不确定的;
  • rd_sec/s:每秒读扇区的次数;
  • wr_sec/s:每秒写扇区的次数;
  • avgrq-sz:平均每次设备 I/O 操作的数据大小(扇区);
  • avgqu-sz:磁盘请求队列的平均长度;
  • await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1 秒=1000 毫秒);
  • svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间;
  • %util:I/O 请求占 CPU 的百分比,比率越大,说明越饱和。可以判断系统的繁忙度。

除此之外,如果想要查看系统内存使用情况,可以执行sar -r 5 3命令;如果要想查看网络运行状态,可执行sar -n DEV 5 3命令,等等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

F407标准库之时钟系统

主要参考正点原子数据手册和源码资料等。 第19讲 STM32时钟系统精讲_哔哩哔哩_bilibili 此处记录较为重要或者较易出错的一些遗漏之处,作为补充。 一般而言,时钟越高,速度越快,但同时抗干扰能力也越差,功耗也越高&am…

java入门学习

输入 数字输入(为什么类型的数字就是sc.next类型)float sumsc.nextFloat() int xsc.nextInt(); import java.util.Scanner;public class 相加问题 {public static void main(String[] args){Scanner scnew Scanner(System.in);int xsc.nextInt();int …

AMB300系列母线槽红外测温解决方案某锂电厂房项目案例分享

安科瑞 耿敏花 一、 行业背景 近年来,在国家政策引导与技术革新驱动的双重作用下,锂电产业保持快速增长态势,产业规模持续扩大,同时新能源产业工厂锂电池生产线对于电的依赖性很高,因而对供电设备的可靠性提出…

php+vue网上培训课程直播授课学习平台

运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框架:Thinkphp5 前端框架:vue.js 服务器:apache 数据库:mysql 1、优智学在线授课平台主要是针对 疫情期间高校对在线教学直播的需求,为在校师生提供高质量…

TOGAF® 基本内容—架构开发方法—E阶段:机会和解决方案

本章描述识别有效交付的交付工具(项目、项目群或项目组合)的过程 在前面阶段确定的目标体系结构。 一、目标 E阶段的目标是: 根据差距分析和候选架构生成架构路线图的初始完整版本 阶段 B、C 和 D 的路线图组件确定是否需要增量方法&#xf…

WooCommerce电商开发:高性能订单存储HPOS性能基准测试

自去年以来,我们一直致力于构建和推出 HPOS(高性能订单存储)作为一项可选功能。这改变了我们在数据库中存储订单数据的方式,从自定义帖子类型 wp_post和wp_postmeta表到专门用于存储订单数据的自定义表。我们还发布了这些表的详细…

六、Spring Cloud Alibaba-nacos配置中心

一、Nacos配置中心 前面说了三、Spring Cloud Alibaba组件nacos,主要介绍的是服务发现。该篇主要介绍配置中心的功能。 官方地址: https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config。 Nacos 提供用于存储配置和其他元数据的 key/val…

tomcat集群下的session共享和负载均衡(memcache实现)

环境 操作系统:windows tomcat1:Apache Tomcat/7.0.52(8085) tomcat2:Apache Tomcat/7.0.52(8086) jdk:1.8.0_251 nginx:nginx-1.20.1(8070) memc…

美颜SDK的算法分析:探究其背后的机器学习模型

美颜SDK作为常见的美颜工具,其使用的算法也备受关注。本文将从机器学习的角度,深入分析美颜SDK的算法模型与实现原理。 一、算法模型 美颜SDK主要采用的算法模型是卷积神经网络(Convolutional Neural Network,CNN)。…

网卡名称排序

udev是一种动态设备管理系统,用于在Linux系统中自动管理设备的插拔、识别、配置等操作。它的主要作用是监视系统中的设备事件,并根据设备事件动态地创建、删除或修改系统中的设备节点。 udev的工作原理是通过读取系统中的硬件信息、驱动程序和设备特征信…

AI天后,在线飙歌,人工智能AI孙燕姿模型应用实践,复刻《遥远的歌》,原唱晴子(Python3.10)

忽如一夜春风来,亚洲天后孙燕姿独特而柔美的音色再度响彻华语乐坛,只不过这一次,不是因为她出了新专辑,而是人工智能AI技术对于孙燕姿音色的完美复刻,以大江灌浪之势对华语歌坛诸多经典作品进行了翻唱,还原…

李沐论文精度系列之九:InstructGPT

文章目录 一、背景1.1 时间线1.2 ChatGPT功能展示1.3 指示学习(Instruct Learning)和提示(Prompt Learning)学习1.4 人工反馈的强化学习(RLHF) 二、摘要三、导言3.1 算法3.2 结论 四、方法和实验细节4.1 数…

【数据结构与算法】树和二叉树

1 树 1.1 术语 关系术语 孩子结点 —— 子树的根 父结点 兄弟结点 —— 同一个结点的孩子结点互为兄弟 祖先结点 后代结点 层次类术语 根的层次为1 其余结点的层次为其父结点层次加1 高度/深度 —— 整个树中结点的最大层次 度 —— 结点的孩子数目称为结点的度 叶子&#xf…

Smartbi携手广州轻工集团打造集团价值创造型总部

广州轻工工贸集团有限公司(简称“广州轻工集团”)是广州市第一家工贸合一的大型企业集团公司,最早起源于1950年9月成立的广州市合作事业管理局,逐渐演化形成广州市轻工业局。1995年10月,广州市轻工业局成建制改建为经济…

spring-transaction源码分析(3)Transactional事务失效原因

问题概述 在Transactional方法中使用this方式调用另一个Transactional方法时&#xff0c;拦截器无法拦截到被调用方法&#xff0c;严重时会使事务失效。 类似以下代码&#xff1a; Transactional public void insertBlogList(List<Blog> blogList) {for (Blog blog : …

【人工智能】在VScode中使用AI插件Bito,功能与ChatGPT类似

文章目录 前言一、到官网下载VScode软件二、VScode软件安装步骤三、Bito插件下载与VScode软件中的使用四、注册Bito 前言 之前在VScode中使用ChatGPT中文版&#xff0c;后来要注册与收费&#xff0c;可采用一些ChatGPT中文版的替代插件。 后发现BitoAI插件功能同样强大&#…

港联证券|断臂、收缩、变阵 “中植系”何去何从?

经历灵魂人物猝然离世的巨震&#xff0c;国内最老牌资本系之一的“中植系”&#xff0c;尚未显露出穿越周期的企稳之象&#xff0c;似仍在风雨飘摇。 投资端&#xff0c;随着监管持续升级与注册制改革全面推进&#xff0c;“中植系”惯用“PE上市公司”以低买高卖的资本套利模式…

流水线三维可视化运维,装配自动化提质增效 | 设备产线管理合集

为大家带来图扑智慧生产线/设备流水线合集。依托图扑对设备加工、物流输送、车辆装配等多个车间流水线进行 3D 可视化展示&#xff0c;通过数字孪生技术推动行业数字化转型升级。 智慧仓储产线 智慧仓储产线通过对仓储现场的数字化建模&#xff0c;利用先进的物联网、大数据、…

外贸网站Magento存在漏洞导致网站被攻击入侵的防护办法

Magento是最受欢迎的外贸电商框架之一&#xff0c;很多企业已经在其基础上进行了二次开发。然而&#xff0c;对于使用2.x版本的老系统来说&#xff0c;安全问题也成为了一大难题。有些客户在找我们SINESAFE做网站安全服务之前&#xff0c;客户也找过建站的公司去清除后门&#…

学习CSS3实现夜空UFO特效,带着心上人去太空旅行

记得那是在一个夜晚&#xff0c;我下班比较晚&#xff0c;行走在空荡的街道&#xff0c;不由想起了何润东“直到整条街上剩我和路灯”的歌声&#xff0c;就这么往前走着。我走哇走&#xff0c;走哇走&#xff0c;突然&#xff0c;一道光划过&#xff0c;你猜我看见了什么&#…