游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

JAVA线上故障排查完整套路!牛掰

  线上故障主要会包括CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU
  一般来讲我们首先会排查CPU方面的问题。CPU异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来分析对应的堆栈情况。
  使用jstack分析CPU问题
  我们先用ps命令找到对应进程的pid(如果你有好几个目标进程,可以先用top看一下哪个占用比较高)。
  接着用topHppid来找到CPU使用率比较高的一些线程
  然后将占用最高的pid转换为16进制printfxpid得到nid
  接着直接在jstack中找到相应的堆栈信息jstackpidgrepnidC5color
  可以看到我们已经找到了nid为0x42的堆栈信息,接着只要仔细分析一番即可。
  当然更常见的是我们对整个jstack文件进行分析,通常我们会比较关注WAITING和TIMEDWAITING的部分,BLOCKED就不用说了。我们可以使用命令catjstack。loggrepjava。lang。Thread。Statesortnruniqc来对jstack的状态有一个整体的把握,如果WAITING之类的特别多,那么多半是有问题啦。
  频繁gc
  当然我们还是会使用jstack来分析问题,但有时候我们可以先确定下gc是不是太频繁,使用jstatgcpid1000命令来对gc分代变化情况进行观察,1000表示采样间隔(ms),S0CS1C、S0US1U、ECEU、OCOU、MCMU分别代表两个Survivor区、Eden区、老年代、元数据区的容量和使用量。YGCYGT、FGCFGCT、GCT则代表YoungGc、FullGc的耗时和次数以及总耗时。如果看到gc比较频繁,再针对gc方面做进一步分析,具体可以参考一下gc章节的描述。
  上下文切换
  针对频繁上下文问题,我们可以使用vmstat命令来进行查看
  cs(contextswitch)一列则代表了上下文切换的次数。
  如果我们希望对特定的pid进行监控那么可以使用pidstatwpid命令,cswch和nvcswch表示自愿及非自愿切换。
  磁盘
  磁盘问题和CPU一样是属于比较基础的。首先是磁盘空间方面,我们直接使用dfhl来查看文件系统状态
  更多时候,磁盘问题还是性能上的问题。我们可以通过iostatiostatdkx来进行分析
  最后一列util可以看到每块磁盘写入的程度,而rrqpms以及wrqms分别表示读写速度,一般就能帮助定位到具体哪块磁盘出现问题了。
  另外我们还需要知道是哪个进程在进行读写,一般来说开发自己心里有数,或者用iotop命令来进行定位文件读写的来源。
  不过这边拿到的是tid,我们要转换成pid,可以通过readlink来找到pidreadlinkfproctasktid。。。。。
  找到pid之后就可以看这个进程具体的读写情况catprocpidio
  我们还可以通过lsof命令来确定具体的文件读写情况lsofppid
  内存
  内存问题排查起来相对比CPU麻烦一些,场景也比较多。主要包括OOM、GC问题和堆外内存。一般来讲,我们会先用free命令先来检查一发内存的各种情况。
  堆内内存
  内存问题大多还都是堆内内存问题。表象上主要分为OOM和StackOverflo。
  OOM
  JMV中的内存不足,OOM大致可以分为以下几种:
  Exceptioninthreadmainjava。lang。OutOfMemoryError:unabletocreatenewnativethread
  这个意思是没有足够的内存空间给线程分配Java栈,基本上还是线程池代码写的有问题,比如说忘记shutdown,所以说应该首先从代码层面来寻找问题,使用jstack或者jmap。如果一切都正常,JVM方面可以通过指定Xss来减少单个threadstack的大小。另外也可以在系统层面,可以通过修改etcsecuritylimits。confnofile和nproc来增大os对线程的限制
  Exceptioninthreadmainjava。lang。OutOfMemoryError:Javaheapspace
  这个意思是堆的内存占用已经达到Xmx设置的最大值,应该是最常见的OOM错误了。解决思路仍然是先应该在代码中找,怀疑存在内存泄漏,通过jstack和jmap去定位问题。如果说一切都正常,才需要通过调整Xmx的值来扩大内存。
  Causedby:java。lang。OutOfMemoryError:Metaspace
  这个意思是元数据区的内存占用已经达到XX:MaxMetaspaceSize设置的最大值,排查思路和上面的一致,参数方面可以通过XX:MaxPermSize来进行调整(这里就不说1。8以前的永久代了)。
  StackOverflow
  栈内存溢出,这个大家见到也比较多。
  Exceptioninthreadmainjava。lang。StackOverflowError
  表示线程栈需要的内存大于Xss值,同样也是先进行排查,参数方面通过Xss来调整,但调整的太大可能又会引起OOM。
  使用JMAP定位代码内存泄漏
  上述关于OOM和StackOverflo的代码排查方面,我们一般使用JMAPjmapdump:formatb,filefilenamepid来导出dump文件
  通过mat(EclipseMemoryAnalysisTools)导入dump文件进行分析,内存泄漏问题一般我们直接选LeakSuspects即可,mat给出了内存泄漏的建议。另外也可以选择TopConsumers来查看最大对象报告。和线程相关的问题可以选择threadoverview进行分析。除此之外就是选择Histogram类概览来自己慢慢分析,大家可以搜搜mat的相关教程。
  日常开发中,代码产生内存泄漏是比较常见的事,并且比较隐蔽,需要开发者更加关注细节。比如说每次请求都new对象,导致大量重复创建对象;进行文件流操作但未正确关闭;手动不当触发gc;ByteBuffer缓存分配不合理等都会造成代码OOM。
  另一方面,我们可以在启动参数中指定XX:HeapDumpOnOutOfMemoryError来保存OOM时的dump文件。
  gc问题和线程
  gc问题除了影响CPU也会影响内存,排查思路也是一致的。一般先使用jstat来查看分代变化情况,比如youngGC或者fullGC次数是不是太多呀;EU、OU等指标增长是不是异常呀等。
  线程的话太多而且不被及时gc也会引发oom,大部分就是之前说的unabletocreatenewnativethread。除了jstack细细分析dump文件外,我们一般先会看下总体线程,通过pstreeeppidwcl。
  或者直接通过查看procpidtask的数量即为线程数量。
  堆外内存
  如果碰到堆外内存溢出,那可真是太不幸了。首先堆外内存溢出表现就是物理常驻内存增长快,报错的话视使用方式都不确定,如果由于使用Netty导致的,那错误日志里可能会出现OutOfDirectMemoryError错误,如果直接是DirectByteBuffer,那会报OutOfMemoryError:Directbuffermemory。
  堆外内存溢出往往是和NIO的使用相关,一般我们先通过pmap来查看下进程占用的内存情况pmapxpidsortrnk3head30,这段意思是查看对应pid倒序前30大的内存段。这边可以再一段时间后再跑一次命令看看内存增长情况,或者和正常机器比较可疑的内存段在哪里。
  我们如果确定有可疑的内存端,需要通过gdb来分析gdbbatchpid{pid}exdumpmemoryfilename。dump{内存起始地址}{内存起始地址内存块大小}
  获取dump文件后可用heaxdump进行查看hexdumpCfilenameless,不过大多数看到的都是二进制乱码。
  NMT是Java7U40引入的HotSpot新特性,配合jcmd命令我们就可以看到具体内存组成了。需要在启动参数中加入XX:NativeMemoryTrackingsummary或者XX:NativeMemoryTrackingdetail,会有略微性能损耗。
  一般对于堆外内存缓慢增长直到爆炸的情况来说,可以先设一个基线jcmdpidVM。nativememorybaseline。
  然后等放一段时间后再去看看内存增长的情况,通过jcmdpidVM。nativememorydetail。diff(summary。diff)做一下summary或者detail级别的diff。
  可以看到jcmd分析出来的内存十分详细,包括堆内、线程以及gc(所以上述其他内存异常其实都可以用nmt来分析),这边堆外内存我们重点关注Internal的内存增长,如果增长十分明显的话那就是有问题了。
  detail级别的话还会有具体内存段的增长情况,如下图。
  此外在系统层面,我们还可以使用strace命令来监控内存分配stracefebrk,mmap,munmapppid
  这边内存分配信息主要包括了pid和内存地址。
  不过其实上面那些操作也很难定位到具体的问题点,关键还是要看错误日志栈,找到可疑的对象,搞清楚它的回收机制,然后去分析对应的对象。比如DirectByteBuffer分配内存的话,是需要fullGC或者手动system。gc来进行回收的(所以最好不要使用XX:DisableExplicitGC)。那么其实我们可以跟踪一下DirectByteBuffer对象的内存情况,通过jmaphisto:livepid手动触发fullGC来看看堆外内存有没有被回收。如果被回收了,那么大概率是堆外内存本身分配的太小了,通过XX:MaxDirectMemorySize进行调整。如果没有什么变化,那就要使用jmap去分析那些不能被gc的对象,以及和DirectByteBuffer之间的引用关系了。GC问题
  堆内内存泄漏总是和GC异常相伴。不过GC问题不只是和内存问题相关,还有可能引起CPU负载、网络问题等系列并发症,只是相对来说和内存联系紧密些,所以我们在此单独总结一下GC相关问题。
  我们在CPU章介绍了使用jstat来获取当前GC分代变化信息。而更多时候,我们是通过GC日志来排查问题的,在启动参数中加上verbose:gcXX:PrintGCDetailsXX:PrintGCDateStampsXX:PrintGCTimeStamps来开启GC日志。
  常见的YoungGC、FullGC日志含义在此就不做赘述了。
  针对gc日志,我们就能大致推断出youngGC与fullGC是否过于频繁或者耗时过长,从而对症下药。我们下面将对G1垃圾收集器来做分析,这边也建议大家使用G1XX:UseG1GC。
  youngGC过频繁
  youngGC频繁一般是短周期小对象较多,先考虑是不是Eden区新生代设置的太小了,看能否通过调整Xmn、XX:SurvivorRatio等参数设置来解决问题。如果参数正常,但是younggc频率还是太高,就需要使用Jmap和MAT对dump文件进行进一步排查了。
  youngGC耗时过长
  耗时过长问题就要看GC日志里耗时耗在哪一块了。以G1日志为例,可以关注RootScanning、ObjectCopy、RefProc等阶段。RefProc耗时长,就要注意引用相关的对象。RootScanning耗时长,就要注意线程数、跨代引用。ObjectCopy则需要关注对象生存周期。而且耗时分析它需要横向比较,就是和其他项目或者正常时间段的耗时比较。比如说图中的RootScanning和正常时间段比增长较多,那就是起的线程太多了。
  触发fullGC
  G1中更多的还是mixedGC,但mixedGC可以和youngGC思路一样去排查。触发fullGC了一般都会有问题,G1会退化使用Serial收集器来完成垃圾的清理工作,暂停时长达到秒级别,可以说是半跪了。
  fullGC的原因可能包括以下这些,以及参数调整方面的一些思路:并发阶段失败:在并发标记阶段,MixGC之前老年代就被填满了,那么这时候G1就会放弃标记周期。这种情况,可能就需要增加堆大小,或者调整并发标记线程数XX:ConcGCThreads。晋升失败:在GC的时候没有足够的内存供存活晋升对象使用,所以触发了FullGC。这时候可以通过XX:G1ReservePercent来增加预留内存百分比,减少XX:InitiatingHeapOccupancyPercent来提前启动标记,XX:ConcGCThreads来增加标记线程数也是可以的。大对象分配失败:大对象找不到合适的region空间进行分配,就会进行fullGC,这种情况下可以增大内存或者增大XX:G1HeapRegionSize。程序主动执行System。gc():不要随便写就对了。
  另外,我们可以在启动参数中配置XX:HeapDumpPathxxxdump。hprof来dumpfullGC相关的文件,并通过jinfo来进行gc前后的dump
  jinfoflagHeapDumpBeforeFullGCpid
  jinfoflagHeapDumpAfterFullGCpid
  jinfoflagHeapDumpBeforeFullGCpid
  jinfoflagHeapDumpAfterFullGCpid
  这样得到2份dump文件,对比后主要关注被gc掉的问题对象来定位问题。网络
  涉及到网络层面的问题一般都比较复杂,场景多,定位难,成为了大多数开发的噩梦,应该是最复杂的了。这里会举一些例子,并从tcp层、应用层以及工具的使用等方面进行阐述。
  超时
  超时错误大部分处在应用层面,所以这块着重理解概念。超时大体可以分为连接超时和读写超时,某些使用连接池的客户端框架还会存在获取连接超时和空闲连接清理超时。读写超时。readTimeoutwriteTimeout,有些框架叫做sotimeout或者socketTimeout,均指的是数据读写超时。注意这边的超时大部分是指逻辑上的超时。soa的超时指的也是读超时。读写超时一般都只针对客户端设置。连接超时。connectionTimeout,客户端通常指与服务端建立连接的最大时间。服务端这边connectionTimeout就有些五花八门了,Jetty中表示空闲连接清理时间,Tomcat则表示连接维持的最大时间。其他。包括连接获取超时connectionAcquireTimeout和空闲连接清理超时idleConnectionTimeout。多用于使用连接池或队列的客户端或服务端框架。
  我们在设置各种超时时间中,需要确认的是尽量保持客户端的超时小于服务端的超时,以保证连接正常结束。
  在实际开发中,我们关心最多的应该是接口的读写超时了。
  如何设置合理的接口超时是一个问题。如果接口超时设置的过长,那么有可能会过多地占用服务端的tcp连接。而如果接口设置的过短,那么接口超时就会非常频繁。
  服务端接口明明rt降低,但客户端仍然一直超时又是另一个问题。这个问题其实很简单,客户端到服务端的链路包括网络传输、排队以及服务处理等,每一个环节都可能是耗时的原因。TCP队列溢出
  tcp队列溢出是个相对底层的错误,它可能会造成超时、rst等更表层的错误。因此错误也更隐蔽,所以我们单独说一说。
  如上图所示,这里有两个队列:synsqueue(半连接队列)、acceptqueue(全连接队列)。三次握手,在server收到client的syn后,把消息放到synsqueue,回复synack给client,server收到client的ack,如果这时acceptqueue没满,那就从synsqueue拿出暂存的信息放入acceptqueue中,否则按tcpabortonoverflow指示的执行。
  tcpabortonoverflow0表示如果三次握手第三步的时候acceptqueue满了那么server扔掉client发过来的ack。tcpabortonoverflow1则表示第三步的时候如果全连接队列满了,server发送一个rst包给client,表示废掉这个握手过程和这个连接,意味着日志里可能会有很多connectionresetconnectionresetbypeer。
  那么在实际开发中,我们怎么能快速定位到tcp队列溢出呢?
  netstat命令,执行netstatsegreplistenLISTEN
  如上图所示,overflowed表示全连接队列溢出的次数,socketsdropped表示半连接队列溢出的次数。
  ss命令,执行sslnt
  上面看到SendQ表示第三列的listen端口上的全连接队列最大为5,第一列RecvQ为全连接队列当前使用了多少。
  接着我们看看怎么设置全连接、半连接队列大小吧:
  全连接队列的大小取决于min(backlog,somaxconn)。backlog是在socket创建的时候传入的,somaxconn是一个os级别的系统参数。而半连接队列的大小取决于max(64,procsysnetipv4tcpmaxsynbacklog)。
  在日常开发中,我们往往使用servlet容器作为服务端,所以我们有时候也需要关注容器的连接队列大小。在Tomcat中backlog叫做acceptCount,在Jetty里面则是acceptQueueSize。
  RST异常
  RST包表示连接重置,用于关闭一些无用的连接,通常表示异常关闭,区别于四次挥手。
  在实际开发中,我们往往会看到connectionresetconnectionresetbypeer错误,这种情况就是RST包导致的。
  端口不存在
  如果像不存在的端口发出建立连接SYN请求,那么服务端发现自己并没有这个端口则会直接返回一个RST报文,用于中断连接。
  主动代替FIN终止连接
  一般来说,正常的连接关闭都是需要通过FIN报文实现,然而我们也可以用RST报文来代替FIN,表示直接终止连接。实际开发中,可设置SOLINGER数值来控制,这种往往是故意的,来跳过TIMEDWAIT,提供交互效率,不闲就慎用。
  客户端或服务端有一边发生了异常,该方向对端发送RST以告知关闭连接
  我们上面讲的tcp队列溢出发送RST包其实也是属于这一种。这种往往是由于某些原因,一方无法再能正常处理请求连接了(比如程序崩了,队列满了),从而告知另一方关闭连接。
  接收到的TCP报文不在已知的TCP连接内
  比如,一方机器由于网络实在太差TCP报文失踪了,另一方关闭了该连接,然后过了许久收到了之前失踪的TCP报文,但由于对应的TCP连接已不存在,那么会直接发一个RST包以便开启新的连接。
  一方长期未收到另一方的确认报文,在一定时间或重传次数后发出RST报文
  这种大多也和网络环境相关了,网络环境差可能会导致更多的RST报文。
  之前说过RST报文多会导致程序报错,在一个已关闭的连接上读操作会报connectionreset,而在一个已关闭的连接上写操作则会报connectionresetbypeer。通常我们可能还会看到brokenpipe错误,这是管道层面的错误,表示对已关闭的管道进行读写,往往是在收到RST,报出connectionreset错后继续读写数据报的错,这个在glibc源码注释中也有介绍。
  我们在排查故障时候怎么确定有RST包的存在呢?当然是使用tcpdump命令进行抓包,并使用wireshark进行简单分析了。tcpdumpien0tcpwxxx。cap,en0表示监听的网卡。
  接下来我们通过wireshark打开抓到的包,可能就能看到如下图所示,红色的就表示RST包了。
  TIMEWAIT和CLOSEWAIT
  TIMEWAIT和CLOSEWAIT是啥意思相信大家都知道。
  在线上时,我们可以直接用命令netstatnawktcp{S〔NF〕}END{for(ainS)printa,S〔a〕}来查看timewait和closewait的数量
  用ss命令会更快ssantawk{S〔1〕}END{for(ainS)printa,S〔a〕}
  TIMEWAIT
  timewait的存在一是为了丢失的数据包被后面连接复用,二是为了在2MSL的时间范围内正常关闭连接。它的存在其实会大大减少RST包的出现。
  过多的timewait在短连接频繁的场景比较容易出现。这种情况可以在服务端做一些内核参数调优:
  表示开启重用。允许将TIMEWAITsockets重新用于新的TCP连接,默认为0,表示关闭
  net。ipv4。tcptwreuse1
  表示开启TCP连接中TIMEWAITsockets的快速回收,默认为0,表示关闭
  net。ipv4。tcptwrecycle1
  表示开启重用。允许将TIMEWAITsockets重新用于新的TCP连接,默认为0,表示关闭
  net。ipv4。tcptwreuse1
  表示开启TCP连接中TIMEWAITsockets的快速回收,默认为0,表示关闭
  net。ipv4。tcptwrecycle1
  当然我们不要忘记在NAT环境下因为时间戳错乱导致数据包被拒绝的坑了,另外的办法就是改小tcpmaxtwbuckets,超过这个数的timewait都会被干掉,不过这也会导致报timewaitbuckettableoverflow的错。
  CLOSEWAIT
  closewait往往都是因为应用程序写的有问题,没有在ACK后再次发起FIN报文。closewait出现的概率甚至比timewait要更高,后果也更严重。往往是由于某个地方阻塞住了,没有正常关闭连接,从而渐渐地消耗完所有的线程。
  想要定位这类问题,最好是通过jstack来分析线程堆栈来排查问题,具体可参考上述章节。这里仅举一个例子。
  开发同学说应用上线后CLOSEWAIT就一直增多,直到挂掉为止,jstack后找到比较可疑的堆栈是大部分线程都卡在了countdownlatch。await方法,找开发同学了解后得知使用了多线程但是确没有catch异常,修改后发现异常仅仅是最简单的升级sdk后常出现的classnotfound。

华为年底推出重磅新品,荣耀本月也将推出多款产品今年可以说是华为手机最难得一年,因为制裁,华为没有芯片可以使用。今年华为的P系列新机也是近期才姗姗来迟,但也因为同样的原因,今年的P50系列也遭到了一些用户的吐槽,因为P50系……一刷头条就停不下来,你们也是这样吗?一刷头条就停不下来,你们也是这样吗?谢邀。我就是这样,不过停下来不行啊,条友给咱点赞你也需回复完呢,要不隔过去,下次再找就麻烦啦,也有时再一不注意点错,再另找,也有一定难……微信悄悄更新,朋友圈封面能动态显示了iOS微信本月初发布了新的8。0。10版本更新,主要上线了AppleWatch微信可支持微信支付,以及视频号直播可折叠显示的新功能。最近iOS微信虽然并没有新版本更新,但……同程生活倒闭,橙心优选后劲不足,社区团购将会迎来什么变局?社区团购发展至今,经历过多个时代,经历了兴盛优选、十荟团、同程生活的老三团时代,也经历了巨头为主的新三团时代。随着同程生活的倒闭,加上橙心优选的后劲不足,市场即将迎来新的……接入米家支持小爱还能查看电量!aigo智能插线板售价仅99家里想要添置一些数码外设产品,我首先想到的都是aigo,作为一个国民品牌,从小我身边就充斥着aigo的产品,而且这么多年口碑依旧很好。如今的aigo产品范围更是广泛,播放器、耳……阿里巴巴与破冰从女员工被侵害说起,有些企业文化破烂到了家今日大舆:阿里巴巴与破冰:从女员工被侵害说起,有些企业文化破烂到了家船长观舆:有些所谓的企业文化破到了家:在行为上,是破格;在骨子里,是破烂;在作用上,是破窗。除了破坏以……理光gr3和富士x100v哪个锐度好?差不多,但是gr3的操作逻辑完胜富士,几大品牌里富士的操作逻辑仅比索尼强一丢丢,富士的卖点就是颜值和胶片滤镜,还有续航比gr3好些,富士拍一天顶多三块电池,gr3备四块电池也不……旅行照,如何让表情更自然?不知道大家有没有这样的困扰帮小伙伴拍照的时候,不知道把人物放在画面的哪个位置才好。所以在这里,可以给大家分享一个小技巧。在景色中寻找自然的框架构图,比如后视镜、窗户、门、充满几……快播王欣有新动作瞄准1个2800亿赛道记者张旋王欣又有了新动作。近日,原快播创始人王欣再创业推出的招聘平台灵鸽App上线新版本,主打通过猎头找工作模式,正式入局在线招聘领域。灵鸽App最早发布于2019……对话高通发明家(二)LolaAwoniyiOteri博士本文仅代表作者观点,不代表IPRdaily立场来源:IPRdaily中文网(iprdaily。cn)原标题:对话高通发明家(二):LolaAwoniyiOteri博……二维码简单原理是什么?原理就是0和1的编码,很简单,但实现起来不是很容易,所以就交给机器做啦。把数字、字母、汉字等信息通过特定的编码翻译成二进制0和1,一个0就是一个白色小方块,一个1就是一个……为什么说摩托车比新能源车更可爱这些天特斯拉的流量的确太高,高得自诩有节操的我也要来蹭。不过,特斯拉各种事件的是非曲直,个中原委,因为没有专业的调查研究,咱们这也不便解读。作为一位摩托车专栏作者,只是突……
关晓彤看电影露腿被打动哭了很向往爱情关晓彤看电影,12月8日晚,关晓彤看电影露腿。关晓彤分享了一则动态,当晚她和好友前往电影院看《你的名字》,穿着过膝长靴的她不惧严寒秀出美腿,虽然带着鸭舌帽和口罩也没能遮挡的面容……飞利浦VTR5103旗舰智能,经典不负创新飞利浦新一代智能录音笔VTR5103C位惊艳出道秀外慧中散发低奢气场去繁就简静音键控操作经典保留一键极速便捷智慧张力拓展终端APP精良质感精……鹤唳华亭萧定权有没有认出陆文昔一个细节就可以看的出来在电视剧《鹤唳华亭》的最新剧情当中,萧定权大婚,陆文昔作为随从进入东宫,更在婚庆大典上面亲手给萧定权剪发,这么近距离的接触,萧定权到底有没有认出陆文昔呢?其实从一个细节就可以看……鹤唳华亭顾皇后怎么死的顾皇后原型结局是什么电视剧《鹤唳华亭》正在热播中,剧情中萧定权的母亲顾皇后的出现吸引着大家的眼球,那么,顾皇后到底是怎么死的?顾皇后在历史上原型结局是什么呢?一起来了解一下。鹤唳华亭顾皇后怎……影视穿帮镜头尴尬有趣这些槽点萌点会博得观众一笑影视穿帮镜头尴尬有趣:这些槽点萌点会博得观众一笑不知何时,找穿帮镜头已经成为了广大网友粉丝们的乐趣。当然并不是说有穿帮的动漫作品又或者影视作品,就是糟糕的!在很多时候,这……雷霆沙赞为什么会出来六个人,雷霆沙赞2什么时候上映雷霆沙赞说出来就有很多人清楚,可雷霆沙赞到底是为什么会出来六个人,很多网友就想去了解一下有关的情况,毕竟出来六个人是很不容易,也是有着很不同的意义,但有的网友就不清楚雷霆沙赞2……外科风云结局内容,外科风云结局庄恕和谁在一起医疗剧《外科风云》所带来的结局不多好,本来想救治好病人,却意外产生注射错误的情况,导致患者死亡,不过结局有庄恕和陆晨曦走一起,所把一波三折的爱情变得美好给展现出来。1外科风云结……一波国产喜剧电影来袭好看的喜剧电影17部推荐推荐优质的爆笑喜剧电影,一大波国产喜剧电影来袭,据说看到此文的都毫不犹豫地拿走。喜剧电影不好看那是假的,喜剧电影不搞笑那也是假的,综合精选的好看的喜剧电影17部推荐,最好收藏起……不爱购物的人去澳门两天怎么玩?附详细路线对于很多打工人来说都是上班困成狗放假就精神抖擞只要抗住了周一到周五的毒打美好的周末总会如期而至在家躺两天既无聊又辜负了这阳光明媚的天气……Aqara门窗传感器P1发布,300元不到的智能家居解决方案对于当下年轻人来说,简约便捷的智能家居生活已经成为装修的主流选择。但由于不少打出智能名号的家电售价较为昂贵,普通家庭根本无法承担昂贵的联动设备费用支出,以至于不少小伙伴对于智能……电影长津湖延期上映,长津湖电影出品方长津湖说出来很多人不清楚,可电影长津湖后期要延期上映,很多网友就想去了解一下有关的故事,看电影长津湖的延期上映是有着事情的影响后,才会进行延期上映,并把观众的胃口激发,但有的网……天玑1200120Hz屏,vivo一高端机型曝光8月17日iQOO8系列正式发布,大家发现iQOO这个品牌开始正式冲击高端领域,用iQOO8Pro这款机型给下半年顶级安卓旗舰打了个样。与此同时大家关注的是iQOO的母品牌vi……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网