본관은 청주(淸州). 자는 방로(邦老). 전라도 강진 출신. 아버지는 증 병조판서 김충정(金忠貞)이다.
일찍이 무과에 급제하고 제주판관(濟州判官)·사복시판관 및 진산·순창·초산 등의 현감을 거쳤다. 1592년(선조 25) 임진왜란이 일어나 왕이 평양으로 파천하자, 방어사로서 허숙(許淑) 등과 함께 수군을 이끌고 대동강을 지켰다.
이 때의 공으로 일시 안주목사에 발탁되었으나, 허위보고를 하고 군율을 어겼다는 대간의 탄핵을 받아 삭직당하였다. 이후 계속 주사장(舟師將)으로 대동강을 지키다가, 여주목사가 되었으나, 맡은 직무를 잘못 처리하여 교체되었다.
1594년 만포진첨절제사(滿浦鎭僉節制使)가 되었으나, 탐비(貪鄙: 탐욕스럽고 비루함)하다는 사간원의 탄핵으로 또 교체되었다.
다음 해에 다시 만포진첨절제사에 임명되었다가 곧 진주목사로 승진되었지만 무능한 무관이 큰 고을의 목민관이 될 수 없다는 대간의 반대로 고령진첨절제사(高嶺鎭僉節制使)로 교체되었다.
1597년 칠천량해전(漆川梁海戰)에서 전사한 이억기(李億祺)의 후임으로 전라우도수군절도사가 되었고, 일시 부장 겸 조방장(副將兼助防將)으로 명나라군에 배속되기도 하였으나, 이후 주로 전라수군절도사로 활약하였다.
통제사 이순신(李舜臣)을 따라 명량해전(鳴梁海戰)에서 많은 공을 세웠다. 그 뒤 밀양부사를 거쳐 1608년(광해군 즉위년) 경상좌병사가 되었다가 3년 후에 제주목사에 제수되었다.