A Rob Hulse strike gave Crewe a vital point as they battle to avoid the drop after Peter Crouch had put the visitors ahead.
Hulse scored after 36 minutes to draw the hosts level after Crouch's 19th goal of the season had put Portsmouth ahead in front on 23 minutes.
Crewe had lost four of their last five home games to leave them in desperate trouble and they struggled to create chances for much of the contest.
Dario Gradi received a blow before kick-off with the news that star striker Dean Ashton had failed to recover from a knee injury. Paul Tait took his place in attack.
Things went from bad to worse when the injured David Wright was replaced by Stephen Foster after just 17 minutes, while Lewis Buxton was booked for dissent for the visitors three minutes later.
David Waterman joined him in the book for a late challenge on Hulse, but Portsmouth then opened the scoring.
Former QPR striker Crouch fired home a powerful shot from the edge of the area after good work by Rowan Vine.
Crewe immediately tried to respond but Hulse's right-foot shot was well saved by veteran goalkeeper Dave Beasant.
But the Railwaymen finally levelled after 36 minutes when Portsmouth lost the ball in midfield.
Crewe swept forward, and Colin Little squared the ball from the right for Hulse to tap home the equaliser.
Nigel Quashie drilled another shot wide after the break as the visitors continued to create the better chances.
The game was getting increasingly scrappy with a lack of real quality from both sides, although Tait did briefly threaten for Crewe with a header which went wide 13 minutes from time.
Steve Lovell, a replacement for Vine, then had a golden chance at the other end but failed to make proper contact with the ball from close range - and Ince was able to make a comfortable save.
Foster then missed a glorious chance when he headed the ball over the crossbar with 10 minutes left following a David Vaughan free-kick.