容易忽視的細(xì)節(jié):Log4j 配置導(dǎo)致的零點(diǎn)接口嚴(yán)重超時
我所負(fù)責(zé)的商城活動系統(tǒng)用于承接公司線上官方商城的營銷活動,最近突然收到凌晨0點(diǎn)的服務(wù)超時告警。
(相關(guān)資料圖)
營銷活動類的系統(tǒng)有如下特點(diǎn):
營銷活動一般會0點(diǎn)開始,如紅包雨、大額優(yōu)惠券搶券等。日常營銷活動的機(jī)會刷新,如每日任務(wù),每日簽到,每日抽獎機(jī)會的刷新等。營銷活動的利益刺激會吸引大量真實(shí)用戶及黑產(chǎn)前來參與活動,所以流量在0點(diǎn)會迎來一波小高峰,也正因如此線上偶現(xiàn)的服務(wù)超時告警起初并未引起我的注意。但是接下來的幾天,每天的凌晨0點(diǎn)都會收到服務(wù)超時告警,這引起了我的警惕,決定一探究竟。
二、問題排查首先通過公司的應(yīng)用監(jiān)控系統(tǒng)查看了0點(diǎn)前后每分鐘各接口的P95響應(yīng)時間。如下圖所示,接口響應(yīng)時間在0點(diǎn)時刻最高達(dá)到了8s。繼續(xù)查看鎖定耗時最高的接口為商品列表接口,下面就針對這個接口展開具體的排查。
2.1 排查思路正式排查之前,先和大家分享下我對接口超時問題的排查思路。下圖是一個簡化的請求流程。
用戶向應(yīng)用發(fā)起請求應(yīng)用服務(wù)進(jìn)行邏輯處理應(yīng)用服務(wù)通過RPC調(diào)用下游應(yīng)用以及進(jìn)行數(shù)據(jù)庫的讀寫操作服務(wù)超時可能是應(yīng)用服務(wù)自身慢導(dǎo)致,也可能下游依賴響應(yīng)慢導(dǎo)致。具體排查思路如下:
3.1.1下游依賴慢服務(wù)排查
(1)通過調(diào)用鏈技術(shù)定位下游依賴中的慢服務(wù)
調(diào)用鏈技術(shù)是實(shí)現(xiàn)系統(tǒng)可觀測性的重要保障,常見的開源方案有ziplin、pinpoint等。完整的調(diào)用鏈可以按時間正序記錄每一次下游依賴調(diào)用的耗時,如rpc服務(wù)調(diào)用、sql執(zhí)行耗時、redis訪問耗時等。因此使用調(diào)用鏈技術(shù)可以迅速定位到下游依賴的慢服務(wù),如dubbo接口訪問超時、慢SQL等。但理想很豐滿,現(xiàn)實(shí)很骨感。由于調(diào)用鏈路信息的數(shù)量過大,想要收集全量的鏈路信息需要較高的存儲成本和計算資源。因此在技術(shù)落地時,通常都會采用抽樣的策略來收集鏈路信息。抽樣帶來的問題是請求鏈路信息的丟失或不完整。
(2)無調(diào)用鏈時的慢服務(wù)排查
如果調(diào)用鏈丟失或不完整,我們就要再結(jié)合其它手段進(jìn)行綜合定位了。
下游RPC服務(wù)響應(yīng)超時:如果是用Dubbo框架,在provider響應(yīng)超時時會打印timeout相關(guān)日志;如果公司提供應(yīng)用監(jiān)控,還可以查看下游服務(wù)P95響應(yīng)時間綜合判斷。
慢SQL:MySQL支持設(shè)置慢SQL閾值,超過該閾值會記錄下慢SQL;像我們常用的數(shù)據(jù)庫連接池Druid也可以通過配置打印慢SQL日志。如果確認(rèn)請求鏈路中存在慢SQL可以進(jìn)一步分析該SQL的執(zhí)行計劃,如果執(zhí)行計劃也沒有問題,再去確認(rèn)在慢SQL產(chǎn)生時mysql主機(jī)的系統(tǒng)負(fù)載。
下游依賴包含Redis、ES、Mongo等存儲服務(wù)時,慢服務(wù)的排查思路和慢SQL排查相似,在此不再贅述。
2.1.2應(yīng)用自身問題排查
(1)應(yīng)用邏輯耗時多
應(yīng)用邏輯耗時多比較常見,比如大量對象的序列化和反序列化,大量的反射應(yīng)用等。這類問題的排查通常要從分析源碼入手,編碼時應(yīng)該盡量避免。
(2)垃圾回收導(dǎo)致的停頓(stop the world)
垃圾回收會導(dǎo)致應(yīng)用的停頓,特別是發(fā)生Old GC或Full GC時,停頓明顯。不過也要看應(yīng)用選配的垃圾回收器和垃圾回收相關(guān)的配合,像CMS垃圾回收器通常可以保證較短的時間停頓,而Parallel Scavenge垃圾回收器則是追求更高的吞吐量,停頓時間會相對長一些。
通過JVM啟動參數(shù)-XX:+PrintGCDetails,我們可以打印詳細(xì)的GC日志,借此可以觀察到GC的類型、頻次和耗時。
(3)線程同步阻塞
線程同步,如果當(dāng)前持有鎖的線程長時間持有鎖,排隊(duì)的線程將一直處于blocked狀態(tài),造成服務(wù)響應(yīng)超時??梢酝ㄟ^jstack工具打印線程堆棧,查找是否有處于block狀態(tài)的線程。當(dāng)然jstack工具只能采集實(shí)時的線程堆棧信息,如果想要查看歷史堆棧信息一般需要通過Prometheus進(jìn)行收集處理。
2.2 排查過程下面按照這個排查思路進(jìn)行排查。
2.2.1下游依賴慢服務(wù)排查
(1)通過調(diào)用鏈查看下游慢服務(wù)
首先到公司的應(yīng)用監(jiān)控平臺上,篩選出0點(diǎn)前后5min的調(diào)用鏈列表,然后按照鏈路耗時逆序排列,發(fā)現(xiàn)最大接口耗時7399ms。查看調(diào)用鏈詳情,發(fā)現(xiàn)下游依賴耗時都是ms級別。調(diào)用鏈因?yàn)槭浅闃硬杉?,可能存在鏈路信息丟失的情況,因此需要其他手段進(jìn)一步排查下游依賴服務(wù)。
(2)通過其他手段排查下游慢服務(wù)
接著我查看了0點(diǎn)前后的系統(tǒng)日志,并沒有發(fā)現(xiàn)dubbo調(diào)用超時的情況。然后通過公司的應(yīng)用監(jiān)控查看下游應(yīng)用P95響應(yīng)時間,如下圖,在0點(diǎn)時刻,下游的一些服務(wù)響應(yīng)時長確實(shí)會慢一些,最高的達(dá)到了1.45s,雖然對上游有一定影響,但不至于影響這么大。
(3)慢SQL排查
接下來是慢SQL的排查,我們系統(tǒng)的連接池使用的是阿里開源的druid,SQL執(zhí)行超過1s會打印慢SQL日志,查看日志中心也沒有發(fā)現(xiàn)慢SQL的蹤跡。
到現(xiàn)在,可以初步排除因下游依賴慢導(dǎo)致服務(wù)超時,我們繼續(xù)排查應(yīng)用自身問題。
2.2.2 應(yīng)用自身問題排查
(1)復(fù)雜耗時邏輯排查
首先查看了接口的源碼,整體邏輯比較簡單,通過dubbo調(diào)用下游商品系統(tǒng)獲取商品信息,本地再進(jìn)行商品信息的排序等簡單的處理。不存在復(fù)雜耗時邏輯問題。
(2)垃圾回收停頓排查
通過公司應(yīng)用監(jiān)控查看應(yīng)用的GC情況,發(fā)現(xiàn)0點(diǎn)前后沒有發(fā)生過full GC,也沒有發(fā)生過Old GC。垃圾回收停頓的因素也被排除。
(3)線程同步阻塞排查
通過公司應(yīng)用監(jiān)控查看是否存在同步阻塞線程,如下圖:
看到這里,終于有種天不負(fù)有心人的感覺了。從00:00:00開始一直到00:02:00,這兩分鐘里,出現(xiàn)了較多狀態(tài)為BLOCKED的線程,超時的接口大概率和這些blocked線程相關(guān)。我們只需要進(jìn)一步分析JVM堆棧信息即可真相大白。
我們隨機(jī)選取一臺比較有代表性的機(jī)器查看block堆棧信息,堆棧采集時間是2022-08-02 00:00:20。
// 日志打印操作,被線程catalina-exec-408阻塞"catalina-exec-99" Id=506 BLOCKED on org.apache.log4j.spi.RootLogger@15f368fa owned by "catalina-exec-408" Id=55204 at org.apache.log4j.Category.callAppenders(Category.java:204) - blocked on org.apache.log4j.spi.RootLogger@15f368fa at org.apache.log4j.Category.forcedLog$original$mp4HwCYF(Category.java:391) at org.apache.log4j.Category.forcedLog$original$mp4HwCYF$accessor$pRDvBPqB(Category.java) at org.apache.log4j.Category$auxiliary$JhXHxvpc.call(Unknown Source) at com.vivo.internet.trace.agent.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:46) at org.apache.log4j.Category.forcedLog(Category.java) at org.apache.log4j.Category.log(Category.java:856) at org.slf4j.impl.Log4jLoggerAdapter.info(Log4jLoggerAdapter.java:324) ...// 日志打印操作,被線程catalina-exec-408阻塞"catalina-exec-440" Id=55236 BLOCKED on org.apache.log4j.spi.RootLogger@15f368fa owned by "catalina-exec-408" Id=55204 at org.apache.log4j.Category.callAppenders(Category.java:204) - blocked on org.apache.log4j.spi.RootLogger@15f368fa at org.apache.log4j.Category.forcedLog$original$mp4HwCYF(Category.java:391) at org.apache.log4j.Category.forcedLog$original$mp4HwCYF$accessor$pRDvBPqB(Category.java) at org.apache.log4j.Category$auxiliary$JhXHxvpc.call(Unknown Source) at com.vivo.internet.trace.agent.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:46) at org.apache.log4j.Category.forcedLog(Category.java) at org.apache.log4j.Category.log(Category.java:856) at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:444) ...// 日志打印操作,被線程catalina-exec-408阻塞"catalina-exec-416" Id=55212 BLOCKED on org.apache.log4j.spi.RootLogger@15f368fa owned by "catalina-exec-408" Id=55204 at org.apache.log4j.Category.callAppenders(Category.java:204) - blocked on org.apache.log4j.spi.RootLogger@15f368fa at org.apache.log4j.Category.forcedLog$original$mp4HwCYF(Category.java:391) at org.apache.log4j.Category.forcedLog$original$mp4HwCYF$accessor$pRDvBPqB(Category.java) at org.apache.log4j.Category$auxiliary$JhXHxvpc.call(Unknown Source) at com.vivo.internet.trace.agent.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:46) at org.apache.log4j.Category.forcedLog(Category.java) at org.apache.log4j.Category.log(Category.java:856) at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:444) ...
通過堆棧信息可以分析出2點(diǎn):
處于blocked狀態(tài)的線程都是日志打印所有的線程都是被線程名為“catalina-exec-408”阻塞追蹤到這里,慢服務(wù)的表層原因就清楚了。被線程catalina-exec-408阻塞的線程,一直處于blocked狀態(tài),導(dǎo)致服務(wù)響應(yīng)超時。
三、根因分析表層原因找到以后,我們一起撥開層層迷霧,尋找真相背后的真相吧!
所有慢服務(wù)的線程都是在打印日志的時候被線程catalina-exec-408阻塞。那么線程catalina-exec-408在做什么呢?
可以發(fā)現(xiàn),在00:00:18.858時刻,該線程在打印登錄態(tài)校驗(yàn)失敗的日志,也并無復(fù)雜的處理邏輯。難道是該線程打印日志慢,阻塞了其他線程嗎?帶著這個疑問,我開始深入日志框架的源碼尋找答案。
我們的項(xiàng)目使用的日志框架是slf4j + log4j。根據(jù)被阻塞的線程棧信息我們定位到這段代碼如下:
publicvoid callAppenders(LoggingEvent event) { int writes = 0; for(Category c = this; c != null; c=c.parent) { // Protected against simultaneous call to addAppender, removeAppender,... // 這是204行,加了sychronized synchronized(c) { if(c.aai != null) { writes += c.aai.appendLoopOnAppenders(event); } if(!c.additive) { break; } } } if(writes == 0) { repository.emitNoAppenderWarning(this); }}
可以看到堆棧信息中的204行是synchronized代碼塊,對其它線程造成阻塞的這是這塊代碼。那么synchronized代碼塊內(nèi)部邏輯是什么呢?為什么要執(zhí)行很久呢?下面是synchronized代碼塊中的核心邏輯:
public int appendLoopOnAppenders(LoggingEvent event) { int size = 0; Appender appender; if(appenderList != null) { size = appenderList.size(); for(int i = 0; i < size; i++) { appender = (Appender) appenderList.elementAt(i); appender.doAppend(event); } } return size; }
可以看到,這塊邏輯就是將日志寫入所有配置的appender中。我們配置的appender有兩個,一個是console appender,也就是輸出到catalina.out文件。還有一個是按照公司日志中心采集要求,以Json格式輸出的appender。這里可以做出推斷,線程catalina-exec-408在將日志輸出到appender時耗時較多。
我很自然的開始懷疑當(dāng)時的機(jī)器負(fù)載,特別是IO負(fù)載可能會比較高,通過公司的機(jī)器監(jiān)控,我們查看了下相關(guān)指標(biāo):
果然,從00:00:00開始,磁盤IO消耗持續(xù)彪高,到1分鐘20秒第一波高峰才結(jié)束,在00:00:20時刻,IO消耗達(dá)到峰值99.63%,接近100%。難怪應(yīng)用輸出一條日志都這么難!
到底是誰把IO資源消耗光了,消耗到幾乎骨頭都不剩?帶著疑問,我進(jìn)一步通過公司的機(jī)器監(jiān)控查看了主機(jī)快照:
發(fā)現(xiàn)在00:00:20時刻,tomcat用戶在執(zhí)行腳本/bin/sh /scripts/cutlog.sh,腳本在執(zhí)行命令cp catalina.out catalina.out-2022-08-02-00。IO消耗達(dá)到了109475612 bytes/s(約104MB/s) 。
事情就要水落石出了,我們繼續(xù)掘地三尺。運(yùn)維同學(xué)登陸到機(jī)器上,切換到tomcat用戶,查看定時任務(wù)列表(執(zhí)行crontab -l),得到結(jié)果如下:
00 00 * * * /bin/sh /scripts/cutlog.sh
正是快照中的腳本/bin/sh /scripts/cutlog.sh,每天0點(diǎn)執(zhí)行。具體的腳本內(nèi)容如下:
$ cat /scripts/cutlog.sh#!/bin/bashfiles=( xxx)time=$(date +%F-%H)for file in ${files[@]}do dir=$(dirname ${file}) filename=$(echo "xxx"|awk -F"/" "{print $NF}") # 歸檔catalina.out日志并清空catalina.out當(dāng)前文件內(nèi)容 cd ${dir} && cp ${filename} ${filename}-${time} && > ${filename}done
我們從腳本中找到了高IO消耗的元兇,就是這個copy命令,目的是將catalina.out日志歸檔并將catalina.out日志文件清空。
這個正常的運(yùn)維腳本肯定是比較消耗 IO 資源的,執(zhí)行的時長受文件大小影響。運(yùn)維同學(xué)也幫忙看了下歸檔的日志大小:
[root@xxx:logdir]# du -sh *1.4G catalina.out2.6G catalina.out-2022-08-02-00
歸檔的文件大小有2.6 G,按照104MB/s估算,需要耗時25秒。也就是00:00:00到00:00:25期間,業(yè)務(wù)日志輸出都會比較緩慢,造成大量線程block,進(jìn)而導(dǎo)致接口響應(yīng)超時。
四、問題解決定位到了問題的根因,就可以對癥下藥了。有幾個方案可以選擇:
4.1 生產(chǎn)環(huán)境不打印日志到console消耗 IO資源的操作就是catalina.out日志的歸檔,如果不寫日志到該文件,是可以解決日志打印IO等待的問題的。但是像本地調(diào)試、壓測環(huán)境還是比較依賴console日志的,所以就需要根據(jù)不同環(huán)境來設(shè)置不同的console appender。目前l(fā)ogback、Log4j2已經(jīng)支持根據(jù)Spring profile來區(qū)別配置,我們用的Log4j還不支持。切換日志底層框架的成本也比較高,另外早期的公司中間件與Log4j日志框架強(qiáng)耦合,無法簡單切換,所以我們并沒有采用這個方案。
4.2 配置日志異步打印Log4j提供了AsyncAppender用于支持異步日志打印,異步日志可以解決同步日志打印IO等待的問題,不會阻塞業(yè)務(wù)線程。
異步日志的副作用:
異步日志是在日志打印時,將event加入到buffer隊(duì)列中,buffer的大小默認(rèn)是128,支持配置。關(guān)于buffer滿了后有兩種處理策略。
(1)阻塞
當(dāng)屬性blocking設(shè)置為true時,使用阻塞策略,默認(rèn)是true。即buffer滿了后,同步等待,此時線程會阻塞,退變成同步日志。
(2)丟棄
如果blocking設(shè)置為false,在buffer滿了以后,會將該條日志丟棄。
4.3 最終方案最終我們選擇了方案2,即配置日志異步打印。buffer隊(duì)列大小設(shè)置2048,考慮到部分日志丟失在業(yè)務(wù)上是可以接受的,因此犧牲了小部分可靠性換區(qū)更高的程序性能,將blocking設(shè)置為false。
4.4 小結(jié)這次的問題排查經(jīng)歷,我收獲了幾點(diǎn)感悟,和大家分享一下:
1)要對線上告警保持敬畏之心
我們應(yīng)該敬畏每一個線上告警,重視每一條錯誤日志?,F(xiàn)實(shí)情況是大多數(shù)時候告警只是因?yàn)榫W(wǎng)絡(luò)抖動,短暫的突發(fā)流量等,是可以自行恢復(fù)的,這就像狼來了的故事一樣,讓我們放松了警惕,導(dǎo)致我們可能會錯過真正的問題,給系統(tǒng)帶來嚴(yán)重災(zāi)難,給業(yè)務(wù)帶來損失。
2)刨根問底
告警只是表象,我們需要搞清楚每個告警的表面原因和根本原因。比如這次的接口超時告警,只有分析出”copy文件耗盡磁盤IO,導(dǎo)致日志打印線程block“這個根本原因后,才能給出優(yōu)雅合理的解決方案。說起來簡單,實(shí)操起來可能會遇到很多困難,這要求我們有清晰的問題排查思路,有良好的的系統(tǒng)可觀測性建設(shè),有扎實(shí)的技術(shù)基本功和不找到”真兇“永不放棄的決心。
最后希望我的這次問題排查經(jīng)歷能夠讓你有所收獲,有所啟發(fā)。我也將本文用到的超時問題排查思路整理成了流程圖,供大家參考。你有遇到過哪些線上故障呢?你的排查思路是怎樣的呢?歡迎留言交流討論。
標(biāo)簽:
推薦文章
- 速訊:來自世爵的世爵C12車系簡介
- 容易忽視的細(xì)節(jié):Log4j 配置導(dǎo)致的零點(diǎn)接口嚴(yán)重超時
- 如何制作會飛的紙燈籠 世界觀點(diǎn)
- SpaceX“星艦”首次發(fā)射出狀況 發(fā)射將推遲至少48小時|當(dāng)前觀察
- 今日快看!為應(yīng)對五一旅游潮,淄博要將方艙改旅舍接待游客?
- 3.5萬+的內(nèi)金沙,買房人應(yīng)該看到的另一面 世界微資訊
- 最資訊丨趙宗實(shí)是誰_趙宗實(shí)介紹
- 微速訊:全國獨(dú)此一家 張學(xué)良舊居石雕成“一絕”
- 2023年山東省面向本土人才招錄基層公務(wù)員考試準(zhǔn)考證打印事項(xiàng)
- 起底長峰醫(yī)院汪文杰:獲“貴人”賞識進(jìn)京創(chuàng)業(yè),22家公司僅4家盈利
- 環(huán)球今頭條!輪胎生產(chǎn)日期超過多久不能買_輪胎生產(chǎn)日期怎么看
- 小學(xué)生炫酷_小學(xué)生酷網(wǎng)
- 視訊!fatestaynightkrkr存檔 fatestaynight存檔
- 今日熱文:最新高校排行榜 呼和浩特最好的大學(xué)最新排名(呼和浩特高校排行榜)
- 清倉減持!這國罕見行動 美債最大危機(jī)來襲? 天天微速訊
- 惠譽(yù)警告:全球恐面臨20年來最嚴(yán)重大米短缺|每日熱文
- 真想看賈靜雯和她打架嗎 聚看點(diǎn)
- 元宇宙周動態(tài) 觀天下
- 南陽市唐河縣:標(biāo)準(zhǔn)化廠房撬動產(chǎn)業(yè)升級-環(huán)球時快訊
- 炒紙白銀的好處有哪些 今日關(guān)注
- 北京消防:事故救援過程中,共疏散轉(zhuǎn)移142人
- 百度貼吧_白讀-當(dāng)前報道
- 2023年寧夏一級建造師考試報名入口
- 世界觀熱點(diǎn):外交部亞洲司負(fù)責(zé)人就G7和日本涉華消極動向提出嚴(yán)正交涉
- 石樓:科技興農(nóng)奏響農(nóng)業(yè)高質(zhì)量發(fā)展的“春之曲”
- 世界看點(diǎn):苑東生物(688513)4月19日主力資金凈賣出541.87萬元
- 美元美債收益率回落 國際金保持震蕩上行
- 歐冠:皇馬晉級四強(qiáng)
- 今頭條!中間繼電器型號價格_中間繼電器型號
- 全球熱消息:鎮(zhèn)原縣打造原州“紅石榴”品牌 促進(jìn)民族團(tuán)結(jié)進(jìn)步
- 關(guān)于一季度GDP、消費(fèi)、房地產(chǎn)、就業(yè)情況,解讀來了! 環(huán)球看點(diǎn)
- 阿里地區(qū)文藝創(chuàng)作喜獲豐收
- 香飄飄業(yè)績雙降,即飲業(yè)務(wù)近3年?duì)I收下滑,蔣建琪布局植物基賽道
- 7月1日起,這些品種將列入麻醉和精神藥品目錄 全球速看料
- 鳳凰臺醫(yī)院開展急救科普宣教
- 當(dāng)前看點(diǎn)!趙文卓官方照 趙文卓曬10歲兒子新發(fā)型
- 關(guān)注:媒體:杭州公開一批對色狼的處罰結(jié)果,各地不妨借鑒效仿
- 港股異動 | IGG(00799)盤中一度漲超7% 4月至今股價已實(shí)現(xiàn)翻倍
- 世界球精選!進(jìn)口新車報道:奔馳GLS將3月10日上市 外形小改/換9AT
- 惠州樓市領(lǐng)漲三線城市 深圳市場回暖輻射多個臨深片區(qū)|天天新動態(tài)
- 4月19日生意社柴油基準(zhǔn)價為7704.80元/噸 世界觀焦點(diǎn)
- 南山鋁業(yè)(600219):MACD指標(biāo)DIF線上穿0軸-技術(shù)指標(biāo)上后市看多(04-19)
- 蒙蒂:佩恩還沒準(zhǔn)備好出場比賽 但他一直在訓(xùn)練并爭取盡快出場
- 沙特外交大臣訪問敘利亞
- 概倫電子:4月18日融資買入958.86萬元,融資融券余額1.73億元
- 瀘州龍馬潭:九獅柚花正飄香 果農(nóng)人工授粉忙
- 天天快資訊:1-3月全國商品房銷售額同比增長4.1%丨開發(fā)經(jīng)營數(shù)據(jù)解讀
- 4月18日基金凈值:南方中證申萬有色金屬ETF最新凈值1.2039,跌0.22%
- 三星980Pro 1T534元
- 華為Nova11搶首發(fā)立減50元
- 改制后皇馬已16次晉級歐冠四強(qiáng),拜仁&巴薩均12次
- 全球熱議:時隔16年,王者歸來!萊奧超級一條龍助攻,AC米蘭晉級歐冠4強(qiáng)!
- 魚膠的功效及正確吃法視頻_魚膠的功效及正確吃法 世界速訊
- 天天頭條:懷化市將全面推動197個鄉(xiāng)鎮(zhèn)林長辦建設(shè)
X 關(guān)閉
最新資訊
- 頭條焦點(diǎn):友發(fā)集團(tuán)(601686):4月18日北向資金增持2.1萬股
- 國泰君安易陽指手機(jī)版下載_國泰君安易陽指電腦版官網(wǎng)|環(huán)球資訊
- 天演維真2022年凈利2906.49萬同比增長48.23% 取得理財產(chǎn)品收益
- 耿怎么讀_耿的讀音
- 滬深兩市今日成交額合計10600億元,中科曙光成交額居首
- 收腹跳對立定跳遠(yuǎn)有幫助嗎_收腹跳-今日視點(diǎn)
- 熱點(diǎn)!高中畢業(yè)時間填6月還是7月 高中畢業(yè)時間
- 動態(tài):斯諾克世錦賽:丁俊暉連續(xù)三年止步首輪 中國軍團(tuán)遭遇四連敗
- 外交部發(fā)言人駁斥七國集團(tuán)外長會聯(lián)合聲明涉華內(nèi)容 當(dāng)前要聞
- 鴿子蛋燉藕梨的做法_全球簡訊
- 小米13 Ultra同時把潛望 1英寸可變光圈塞進(jìn)手機(jī)里 雷軍:非常不容易
- 播報:lol預(yù)選位模式為什么不再上線_lol預(yù)選位模式
- 北京市通報長峰醫(yī)院火災(zāi)情況|熱聞
- 忘年戀的電視有哪些_這幾部很是經(jīng)典 天天快消息
- 書香最致遠(yuǎn) 說劍紛縱橫 第三屆鎮(zhèn)江“書香少年”校園辯論大賽成功舉辦-環(huán)球快播
- 前沿資訊!興勝創(chuàng)建(00896)注銷已回購股份合共524.8萬股
- 值得買:公司2022年利潤分配預(yù)案具有合理性和必要性 快看
- 今日1美金兌多少歐元(2023年4月18日)_環(huán)球觀焦點(diǎn)
- 艾葉功效和作用? 每日信息
- 天天動態(tài):幼童高熱驚厥 民警緊急開辟生命通道
- 測量“城市呼吸”,助力“雙碳”目標(biāo) 當(dāng)前報道
- 全球快資訊:法院“暖企”行動為企業(yè)規(guī)范發(fā)展“把脈支招”
- 微資訊!家聯(lián)科技(301193.SZ)2022年度權(quán)益分派10轉(zhuǎn)6派3元、股權(quán)登記日為4月25日
- 重點(diǎn)聚焦!2023年養(yǎng)老金調(diào)整最新消息,養(yǎng)老金要是漲4%?具體可以漲多少?
- 2023.04.18牛大復(fù)盤日記
- 從一次不“瓶”凡的交換,看見地球第三極的極凈生態(tài) 世界快訊
- 4月18日魯增化工冰晶石報價平穩(wěn)
- 天天快看點(diǎn)丨變態(tài)奇跡手游哪個最好玩 2023奇跡變態(tài)手游TOP5
- 什么是地下炒銀
- 五一期間 吉林地區(qū)加開這些動車
- 湖北啟動實(shí)施“科創(chuàng)企業(yè)全生命周期培育計劃”|環(huán)球播資訊
- 預(yù)售票房破6千萬、豆瓣評分高達(dá)9.2!《灌籃高手》本周四即將上映 世界訊息
- 上海男籃:將對球迷全額退票,場次為對陣深圳的季后賽|世界熱議
- 天天簡訊:恭喜樊振東!乒聯(lián)官宣排名,一哥2項(xiàng)世界第1創(chuàng)紀(jì)錄,日乒被超
- 億元股票捐母校!這些公司實(shí)控人也曾豪氣捐贈 環(huán)球通訊
- 今亮點(diǎn)!農(nóng)村合作社做賬好麻煩_農(nóng)村合作社如何做賬
- 重慶綦江:夕陽西下映余暉
- 山東奏響優(yōu)化營商環(huán)境“新樂章” 多措并舉助企發(fā)展
- 環(huán)球熱頭條丨杭州女童被保姆遺留電梯墜亡案庭審結(jié)束:將擇期宣判
- 廣州公積金賬號和初始密碼是什么?密碼如何重新設(shè)置?|世界報道
- 今日最新!湖南道縣:防汛演練 備戰(zhàn)汛期(組圖)
- 環(huán)球今亮點(diǎn)!租賃圓桌快訊 | 郭杰群:目前國內(nèi)REITs還是非常不規(guī)范的
- 河南 311項(xiàng)(人)獲8930萬元省科技獎勵
- 9月19日上市 江淮和悅MPV內(nèi)飾細(xì)節(jié)曝光
- 交通運(yùn)輸部制定方案:改善貨車司機(jī)停車休息條件
- 陳可辛17歲女兒太像爸爸,氣質(zhì)成熟像中年阿姨,打扮土味不像00后_播報
- 嘉定區(qū)外岡鎮(zhèn)幼兒園入學(xué)政策最新 消息
- 再迎海上“巨無霸”!新晉全球最大集裝箱船首靠全球最大港
- 拓山重工:2022年度凈利潤約5883萬元 同比下降31.79% 天天關(guān)注
- 甘肅推進(jìn)公共資源交易“一張網(wǎng)”建設(shè)|焦點(diǎn)速讀
X 關(guān)閉